2016-06-01 4 views
0

Ich habe Django-Ansicht, die JSON an JS zurückgibt.Django - JSON-Antwort, die json [i] [j] -Referenz erlaubt, anstatt json [0] .field.field_name

def some_view(request, param): 
    my_queryset = SomeModel.objects.filter(...).select_related('related_model') 
    serialized_data = serializers.serialize("json", [x.some_related_field for x in my_queryset]) 
    return HttpResponse(serialized_data, content_type='application/json') 

nun den Wert von some_related_field zu bekommen, ich habe in JS schreiben:

obj[i].fields.some_related_field[j] 

Mein Ziel ist es, die json von Python in einer Art und Weise zurück, die für obj [i] ermöglichen sollte, [j] Syntax. Ist es möglich ?

Ich erwarte, ich muss dump-Methode verwenden, aber es ist absolut wichtig, dass ich auch die Felder eines verwandten Modells greifen. Bis jetzt konnte ich nicht verwandte Felder mit der Dump-Methode erfassen.

Antwort

2

Das serialisierte Ausgabeformat hängt vom verwendeten Serializer ab.

Wenn Sie Django 1.7+ ausführen, können Sie eine JsonResponse (mit safe=False) anstelle einer HttpResponse zurückgeben. Hinweis: Sie müssen safe=False angeben, wenn Sie eine JSON-Liste auf der Stammebene

z.

def some_view(request, param): 
    my_queryset = SomeModel.objects.filter(...).select_related(...) 
    list_data = [x.some_related_field for x in my_queryset] 
    return JsonResponse(list_data, safe=False) 

Andernfalls, wenn Sie eine Version von Django weniger als 1,7 verwenden, könnten Sie tun:

+1

Brilliant, briliiant, brilliant! Ich liebe diese Seite !!! Können Sie mir bitte sagen, wie kann ich bitte mehr als ein Feld des zugehörigen Modells greifen? Etwas wie list_data = [x.some_related_model_id, x.some_related_model_value für x in my_queryset] –

+1

Ja, du kannst ein weiteres Listenverständnis machen '[{'a': x.a, 'b': x.b} für x in my_queryset]'. Dies kann jedoch sehr kompliziert werden. Wenn Sie versuchen, eine API zu schreiben, würde ich vorschlagen, ein RESTful-Framework wie Django Rest Framework – dhui

+0

Cool zu verwenden, aber der Nachteil ist, dass ich smth wie json_obj [i] .a anstelle von json_obj [i] [j schreiben muss ] was den JS-Code weniger generisch macht. Keine Möglichkeit, obj [i] [j] -Syntax ohne REST zu aktivieren, denke ich? –

Verwandte Themen