Django에서 QuerySet을 JSON으로 변환
-
사용자 정의 메소드를 사용하여
QuerySet
를JSON
으로 변환 -
Django의 내장 직렬 변환기를 사용하여
QuerySet
을JSON
으로 변환 -
values()
함수를 사용하여QuerySet
을JSON
으로 변환
Django에서 모든 모델 관리자는 일부 쿼리가 모델에 적용될 때QuerySet
를 반환합니다. QuerySet
은 Python 및 Django의 템플릿 언어에서 쉽게 사용할 수 있습니다. QuerySet
에 대해 많은 작업을 수행하여 원하는 결과 또는 레코드를 가져올 수 있습니다. 그러나QuerySet
에는 단점이 있습니다. 이들은JSON
직렬화 가능하지 않습니다.
웹 애플리케이션과 별도로 Django는 API를 만드는데도 사용되며 API에서JSON
은 데이터가 서버와 클라이언트간에JSON
형식으로 이동하기 때문에 필수적입니다.
QuerySet
을JSON
으로 직접 변환 할 수는 없지만QuerySet
를 사용하여 Python 객체 또는 문자열 화 된JSON
을 만들 수 있습니다. 그것을 달성하는 몇 가지 방법이 있습니다. 이 기사에서는QuerySet
를JSON
으로 변환하는 가장 좋은 방법에 대해 설명합니다.
사용자 정의 메소드를 사용하여QuerySet
를JSON
으로 변환
다음과 같은 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의 내장 직렬 변환기를 사용하여QuerySet
을JSON
으로 변환
Django에는 모델을 원하는 형식으로 변환하는 데 사용할 수있는 직렬 변환기가 내장되어 있습니다. 직렬 변환기를 사용하여 모델을JSON
,XML
,JSONL
및YAML
형식으로 변환 할 수 있습니다. 일부 형식은 작동을 위해 추가 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
을 변환 할 수 있습니다. person
및people
변수는 이제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()
함수를 사용하여QuerySet
을JSON
으로 변환
세 번째 방법은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")