IT

Django queryset.values()를 json으로 시리얼화하려면 어떻게 해야 합니까?

itgroup 2023. 2. 22. 21:42
반응형

Django queryset.values()를 json으로 시리얼화하려면 어떻게 해야 합니까?

저는 여러 개의 필드가 있는 모델을 가지고 있습니다만, 이 문제는 3개의 필드만 있으면 됩니다.serialize를 하려고 하면.valuesset 예외를 받습니다.

'timeout' 개체에 특성 '_timeout'이 없습니다.

코드는 다음과 같습니다.

queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = serializers.serialize('json', queryset, ensure_ascii=False)

다른 사람들이 말했듯이, Django의 시리얼라이저는 ValuesQuerySet을 처리할 수 없습니다.단, 표준규격을 사용하여 시리얼화할 수 있습니다.json.dumps()를 사용하여 ValuesQuerySet을 목록으로 변환합니다.list()10진수 등의 장고 필드가 세트에 포함되어 있는 경우 장고J를 통과해야 합니다.소네코더다음과 같이 됩니다.

import json
from django.core.serializers.json import DjangoJSONEncoder

queryset = myModel.objects.filter(foo_icontains=bar).values('f1', 'f2', 'f3')
serialized_q = json.dumps(list(queryset), cls=DjangoJSONEncoder)

Django 시리얼라이저는 쿼리셋만 직렬화할 수 있으며 쿼리셋은 반환하지 않습니다.ValuesQuerySet물건.따라서 사용을 피한다.values()대신 사용할 필드를 지정합니다.values()serialize 메서드는 다음과 같습니다.

예를 들어 이 SO 질문을 보세요.

objectQuerySet = ConventionCard.objects.filter(ownerUser = user)
data = serializers.serialize('json', list(objectQuerySet), fields=('fileName','id'))

사용하는 대신objectQuerySet.values('fileName','id'), 를 사용하여 이러한 필드를 지정합니다.fields파라미터serializers.serialize()위와 같이

개체에서 목록 만들기QuerySet:

data_ready_for_json = list( ConventionCard.objects.filter(ownerUser = user).values('fileName','id') )

내 해결책은 잘 작동한다.

from django.core.serializers import serialize
import json

permission_list = Permission.objects.all().order_by('-id')
permission_serialize= json.loads(serialize('json', permission_list))
return JsonResponse({'data': permission_serialize})

모든 항목을 받아쓰도록 캐스팅하고 json.dumps를 사용하여 json을 만듭니다.

json.dumps([dict(item) for item in SomeModel.objects.all().values('id', 'title')])

이것을 시험해 보세요.

queryset = myModel.objects.filter(foo_icontains=bar)
serialized_q = serializers.serialize(queryset, many = True)

언급URL : https://stackoverflow.com/questions/7650448/how-to-serialize-django-queryset-values-into-json

반응형