JSON 시리얼화 불가
쿼리셋을 시리얼화하기 위한 코드는 다음과 같습니다.
def render_to_response(self, context, **response_kwargs):
return HttpResponse(json.simplejson.dumps(list(self.get_queryset())),
mimetype="application/json")
그리고 다음은 나의get_quersety()
[{'product': <Product: hederello ()>, u'_id': u'9802', u'_source': {u'code': u'23981', u'facilities': [{u'facility': {u'name': {u'fr': u'G\xe9n\xe9ral', u'en': u'General'}, u'value': {u'fr': [u'bar', u'r\xe9ception ouverte 24h/24', u'chambres non-fumeurs', u'chambres familiales',.........]}]
그걸 연재해야겠어하지만 여기엔 '일련화 할 수 없다'고 써있는데요<Product: hederello ()>
리스트는 django 오브젝트와 dicts로 구성되어 있기 때문입니다.좋은 생각 있어요?
simplejson
그리고.json
django 오브젝트는 잘 작동하지 않습니다.
Django의 내장 시리얼라이저는 django 오브젝트로 채워진 쿼리셋만 시리얼화할 수 있습니다.
data = serializers.serialize('json', self.get_queryset())
return HttpResponse(data, content_type="application/json")
당신의 경우,self.get_queryset()
에는 안에 django 오브젝트와 딕트가 혼재되어 있습니다.
한 가지 옵션은 에서 모델인스턴스를 삭제하는 것입니다.self.get_queryset()
를 사용하여 딕트로 대체한다.model_to_dict
:
from django.forms.models import model_to_dict
data = self.get_queryset()
for item in data:
item['product'] = model_to_dict(item['product'])
return HttpResponse(json.simplejson.dumps(data), mimetype="application/json")
가장 쉬운 방법은 Json Response를 사용하는 것입니다.
쿼리셋의 경우 다음과 같이 해당 쿼리셋의 목록을 전달해야 합니다.
from django.http import JsonResponse
queryset = YourModel.objects.filter(some__filter="some value").values()
return JsonResponse({"models_to_return": list(queryset)})
이름 있는 필드도 제공하는 ".values" 메서드를 사용하면 이 작업을 쉽게 수행할 수 있습니다.
result_list = list(my_queryset.values('first_named_field', 'second_named_field'))
return HttpResponse(json.dumps(result_list))
"value queryset" 유형은 반복 가능한 것으로 선택될 경우 받아쓰기에 불과하므로 "list"를 사용하여 데이터를 반복할 수 있어야 합니다.
문서: https://docs.djangoproject.com/en/1.7/ref/models/querysets/ #values
버전 1.9부터 json을 쉽고 공식적으로 입수할 수 있는
from django.http import JsonResponse
from django.forms.models import model_to_dict
return JsonResponse( model_to_dict(modelinstance) )
js-programmer는 저에게 json 인코딩 문자열 대신 정확한 JSON 포맷 데이터를 반환해 달라고 요청했습니다.
해결책은 다음과 같습니다.(브라우저에서 바로 사용하거나 볼 수 있는 개체가 반환됩니다.)
import json
from xxx.models import alert
from django.core import serializers
def test(request):
alert_list = alert.objects.all()
tmpJson = serializers.serialize("json",alert_list)
tmpObj = json.loads(tmpJson)
return HttpResponse(json.dumps(tmpObj))
모델을 사용하는 동안 이 문제를 해결하는 또 다른 좋은 방법은values()
기능.
def returnResponse(date):
response = ScheduledDate.objects.filter(date__startswith=date).values()
return Response(response)
먼저 모델에 to_dict 메서드를 추가했습니다.
def to_dict(self):
return {"name": self.woo, "title": self.foo}
그리고 이건 내가 갖고 있어.
class DjangoJSONEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, models.Model):
return obj.to_dict()
return JSONEncoder.default(self, obj)
dumps = curry(dumps, cls=DjangoJSONEncoder)
마지막으로 이 클래스를 사용하여 쿼리셋을 시리얼화합니다.
def render_to_response(self, context, **response_kwargs):
return HttpResponse(dumps(self.get_queryset()))
이것은 꽤 잘 작동한다.
Django 모델의 경우 다음을 시도해 보십시오.
users = User.objects.all()
return JsonResponse ({'data' : list(users)})
언급URL : https://stackoverflow.com/questions/16790375/django-object-is-not-json-serializable
'programing' 카테고리의 다른 글
MongoParseError: useCreateIndex, useFindAndModify 옵션은 지원되지 않습니다. (0) | 2023.03.12 |
---|---|
하나의 파일에서 여러 JSON 개체를 추출하려면 어떻게 해야 합니까? (0) | 2023.03.12 |
Ajax 링크 요청을 보호하는 방법 (0) | 2023.03.12 |
유형에서 속성 제외 (0) | 2023.03.12 |
어레이의 첫 번째 항목을 새 필드에 투영(MongoDB 집약) (0) | 2023.03.12 |