본문 바로가기

Python/Django

Django: QuerySet to Json #QuerySet Json으로 보내기 # serializer # JsonResponse

728x90
반응형

Djano QuerySet 값을 Json으로 보내줄 때,

data를 serialize를 하지 않고 보내면 다음과 같은 오류 발생

 

TypeError: Object of type MyCoupon is not JSON serializable

 

따라서 serialize를 해줘서 보내야 한다.

from django.core import serializers

위와 같이 serializers를 import해서 이용해도 되지만

 

ORM query로 얻은 QuerySet을 .values()로 뽑아서 보내줘도 된다.

 

from django.http import JsonResponse
from .models import YourModel

def your_view(request):
    queryset = YourModel.objects.all().values()
    data = list(queryset)
    return JsonResponse(data, safe=False)

* safe=False

  default로 safe=True로 설정되어 있는데,

  dictionary 형태를 받아서 보낼 때는 safe 속성값을 default safe=True 상태로 보내면 된다.

  그런데 위 예제와 같이 list로 담아서 Json형태로 보낼 때는 safe=False 값을 설정해줘야

  Django에서 Json 형태로 변형해서 값을 보내준다.

 

 또는 아래와 같이 dictionary 형태로 보내서 safe=False를 사용하지 않을 수도 있다.

from django.http import JsonResponse
from .models import YourModel

def your_view(request):
    queryset = YourModel.objects.all().values()
    data = list(queryset)
    return JsonResponse({"data":data})

 

728x90
반응형