Django에서 QuerySet을 JSON으로 변환

Vaibhav Vaibhav 2023년1월30일
  1. 사용자 정의 메소드를 사용하여QuerySetJSON으로 변환
  2. Django의 내장 직렬 변환기를 사용하여QuerySetJSON으로 변환
  3. values()함수를 사용하여QuerySetJSON으로 변환
Django에서 QuerySet을 JSON으로 변환

Django에서 모든 모델 관리자는 일부 쿼리가 모델에 적용될 때QuerySet를 반환합니다. QuerySet은 Python 및 Django의 템플릿 언어에서 쉽게 사용할 수 있습니다. QuerySet에 대해 많은 작업을 수행하여 원하는 결과 또는 레코드를 가져올 수 있습니다. 그러나QuerySet에는 단점이 있습니다. 이들은JSON직렬화 가능하지 않습니다.

웹 애플리케이션과 별도로 Django는 API를 만드는데도 사용되며 API에서JSON은 데이터가 서버와 클라이언트간에JSON형식으로 이동하기 때문에 필수적입니다.

QuerySetJSON으로 직접 변환 할 수는 없지만QuerySet를 사용하여 Python 객체 또는 문자열 화 된JSON을 만들 수 있습니다. 그것을 달성하는 몇 가지 방법이 있습니다. 이 기사에서는QuerySetJSON으로 변환하는 가장 좋은 방법에 대해 설명합니다.

사용자 정의 메소드를 사용하여QuerySetJSON으로 변환

다음과 같은 Django 모델이 있다고 가정합니다. 이 모델의 객체를 받아들이고 객체의 사전 표현을 반환하는 함수를 작성할 수 있습니다.

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)

그리고 변환을 처리하는 방법은 다음과 같습니다.

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)

이 접근 방식은 사전 표현에 포함하려는 데이터에 대한 더 많은 제어를 제공합니다. 예를 들어 외래 키가있는 경우 참조 된 모델의 다양한 정보를 포함 할 수 있습니다. 또한 몇 가지 계산을 수행하여 사전에 포함시킬 수 있습니다.

Django의 내장 직렬 변환기를 사용하여QuerySetJSON으로 변환

Django에는 모델을 원하는 형식으로 변환하는 데 사용할 수있는 직렬 변환기가 내장되어 있습니다. 직렬 변환기를 사용하여 모델을JSON,XML,JSONLYAML형식으로 변환 할 수 있습니다. 일부 형식은 작동을 위해 추가 Python 라이브러리가 필요합니다.

위의Person모델을JSON형식으로 변환해야한다고 가정합니다. 이를 위해 다음을 수행합니다.

from django.core import serializers

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

직렬 변환기는 단일 모델과QuerySet을 변환 할 수 있습니다. personpeople변수는 이제JSON형식의 데이터를 포함합니다.

모델의 이름 필드 만 변환해야한다고 가정 해 보겠습니다. 이를 위해 다음을 수행합니다.

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")
)

fields매개 변수를 모델의 필드 이름 튜플로 설정해야합니다. 여기서 주목해야 할 한 가지 요점은 기본 키인id는 언급 여부에 관계없이 항상 직렬화된다는 것입니다.

serializer에 대한 자세한 내용은 Django의 공식 문서 여기를 참조하십시오.

values()함수를 사용하여QuerySetJSON으로 변환

세 번째 방법은QuerySet를 통해 호출 할 수있는values()메소드를 사용합니다. QuerySet는 모델 인스턴스 세트를 리턴하는 반면values()메소드는 모델 인스턴스를 나타내는 사전 세트를 리턴합니다.

다음 코드를 참조하십시오.

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

기본적으로 사전에는 테이블의 모든 필드가 포함됩니다. 필드를 제한해야하는 경우이 메서드에서 선택적 위치 인수*fields를 사용할 수 있습니다. 다음 코드 스 니펫을 참조하십시오.

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.