web-dev-qa-db-ja.com

JSONResponseを使用してDjango 1.7?

Django 1.7でhttp.JSONResponseオブジェクトをJSONをクライアントに送信します。私の見解は:

#Ajax
def get_chat(request):
    usuario = request.GET.get('usuario_consultor', None)
    usuario_chat = request.GET.get('usuario_chat', None)

    mensajes = list(MensajeDirecto.objects.filter(Q(usuario_remitente = usuario, usuario_destinatario = usuario_chat) | Q(usuario_remitente = usuario_chat, usuario_destinatario = usuario)))


    return JsonResponse(mensajes, safe=False)

しかし、次のエラーが表示されます。

<MensajeDirecto:Towi CrisTowi>はJSONシリアル化できません `

QuerySetをシリアル化してJSON形式で送信する方法を知っていますか?

20
Cris_Towi
from Django.core import serializers
from Django.http import JsonResponse

def get_chat(request):
    usuario = request.GET.get('usuario_consultor', None)
    usuario_chat = request.GET.get('usuario_chat', None)

    mensajes = MensajeDirecto.objects.filter(Q(usuario_remitente = usuario, usuario_destinatario = usuario_chat) | Q(usuario_remitente = usuario_chat, usuario_destinatario = usuario))

    return JsonResponse(serializers.serialize('json', mensajes), safe=False)

参照: https://docs.djangoproject.com/en/dev/ref/request-response/#jsonresponse-objectshttps://docs.djangoproject.com/en/1.7/topics/serialization /

13
micrypt

JsonResponseで再シリアル化しないでください。以下を使用して、正しくフォーマットされたJSON応答を取得します。

from Django.core import serializers
from Django.http import HttpResponse

def my_view(request):
    my_model = MyModel.objects.all()
    response = serializers.serialize("json", my_model)
    return HttpResponse(response, content_type='application/json')

JsonResponseを使用すると、既にシリアル化されたJSONが文字列に強制されますが、これはおそらく望んでいないことです。

注:Django 1.1で動作します

55