Konvertieren Sie ein QuerySet in ein JSON in Django

Vaibhav Vaibhav 19 Oktober 2021
  1. Konvertieren Sie ein QuerySet in ein JSON mit einer benutzerdefinierten Methode
  2. Konvertieren Sie ein QuerySet in ein JSON mit den integrierten Serializern von Djangogo
  3. Konvertieren Sie ein QuerySet in ein JSON mit der Funktion values()
Konvertieren Sie ein QuerySet in ein JSON in Django

In Django geben alle Modellmanager ein QuerySet zurück, wenn eine Abfrage auf ein Modell angewendet wird. Ein QuerySet kann problemlos in Python und der Templating-Sprache von Django verwendet werden. Wir können viele Aktionen über ein QuerySet ausführen, um die gewünschten Ergebnisse oder Datensätze abzurufen. Ein QuerySet hat jedoch einen Nachteil: Sie sind nicht JSON serialisierbar.

Abgesehen von Webanwendungen wird Django auch verwendet, um APIs zu erstellen, und bei APIs ist JSON unerlässlich, da Daten im JSON-Format zwischen Server und Client reisen.

Obwohl es nicht direkt möglich ist, ein QuerySet in JSON zu konvertieren, können wir ein QuerySet verwenden, um ein Python-Objekt oder ein stringifiziertes JSON zu erstellen. Es gibt mehrere Möglichkeiten, dies zu erreichen. In diesem Artikel werden einige der besten Möglichkeiten beschrieben, um ein QuerySet in ein JSON zu konvertieren.

Konvertieren Sie ein QuerySet in ein JSON mit einer benutzerdefinierten Methode

Angenommen, wir haben ein Django-Modell wie folgt. Wir können eine Funktion schreiben, die ein Objekt dieses Modells akzeptiert und eine Dictionarydarstellung des Objekts zurückgibt.

from django.db import models


class Person(models.Model):
    username = models.CharField(max_length=200, unique=True)
    firstName = models.CharField(max_length=200)
    middleName = models.CharField(max_length=200)
    lastName = models.CharField(max_length=200)
    age = models.IntegerField(default=0)

Und die Methode zur Handhabung der Konvertierung ist wie folgt.

def personToDictionary(person):
    if person == None:
        return None

    dictionary = {}
    dictionary["username"] = person.username
    dictionary["firstName"] = person.firstName
    dictionary["middleName"] = person.middleName
    dictionary["lastName"] = person.lastName
    dictionary["age"] = person.age

    return dictionary


person = Person.objects.get(id=25)
personDictionary = personToDictionary(person)

Dieser Ansatz gibt uns mehr Kontrolle über die Daten, die wir in die Dictionarydarstellung aufnehmen möchten. Wenn wir beispielsweise Fremdschlüssel hätten, könnten wir verschiedene Informationen der referenzierten Modelle einschließen. Wir können auch einige Berechnungen durchführen und in das Dictionary aufnehmen.

Konvertieren Sie ein QuerySet in ein JSON mit den integrierten Serializern von Djangogo

Django verfügt über integrierte Serializer, mit denen Modelle in die gewünschte Form konvertiert werden können. Mit Serializern kann ein Modell in die Formate JSON, XML, JSONL und YAML umgewandelt werden. Einige der Formate erfordern einige zusätzliche Python-Bibliotheken, um zu funktionieren.

Angenommen, wir müssen das obige Person-Modell in ein JSON-Format konvertieren. Dazu würden wir Folgendes tun.

from django.core import serializers

person = serializers.serialize("json", Person.objects.get(id=25))
people = serializers.serialize("json", Person.objects.all())

Ein Serializer kann sowohl ein einzelnes Modell als auch ein QuerySet konvertieren. Die Variablen person und people enthalten nun die Daten im JSON-Format.

Nehmen wir an, wir müssen nur die Namensfelder des Modells konvertieren. Um dies zu erreichen, würden wir Folgendes tun.

from django.core import serializers

person = serializers.serialize(
    "json", Person.objects.get(id=25), fields=("firstName", "middleName", "lastName")
)
people = serializers.serialize(
    "json", Person.objects.all(), fields=("firstName", "middleName", "lastName")
)

Wir müssen den Parameter fields auf ein Tupel von Feldnamen des Modells setzen. Ein wichtiger Punkt hier ist, dass der Primärschlüssel, die id, immer serialisiert wird, egal ob Sie ihn erwähnen oder nicht.

Weitere Informationen zu Serializern finden Sie in der offiziellen Dokumentation von Django hier.

Konvertieren Sie ein QuerySet in ein JSON mit der Funktion values()

Der dritte Ansatz verwendet die Methode values(), die über ein QuerySet aufgerufen werden kann. Ein QuerySet gibt eine Menge von Modellinstanzen zurück, während die Methode values() eine Menge von Dictionaries zurückgibt, die Modellinstanzen repräsentieren.

Siehe den folgenden Code.

person = Person.objects.filter(age=25).values()
people = Person.objects.all().values()

Standardmäßig enthält ein Dictionary alle Felder der Tabelle. Wenn wir die Felder einschränken müssen, können wir in dieser Methode die optionalen Positionsargumente *fields verwenden. Weitere Informationen finden Sie im folgenden Code-Snippet.

person = Person.objects.filter(age=25).values("id", "age", "firstName", "lastName")
people = Person.objects.all().values("id", "firstName")
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.