2016-02-24 10 views
7

ich diese Frage wieder (it was asked back in 2009),Wie man select_related() und value() kombiniert? (2016)

Wir wissen, es ist eine values() Methode von QuerySet, wenn es eine foreignkey (Autor, zum Beispiel), es ergibt wie:

[{ 'author_id':3, ... }, ...] 

ich möchte ein Ergebnis wie:

[{ 'author':{'name':'dave',...}, ... }, ...] 

etwas chang Ed in den neueren Versionen von Django?

Ich möchte die Abfrage in eine Kombination von Listen und Wörterbüchern konvertieren, ist das möglich?

Ich nehme dann dieses Objekt und platziere es in ein größeres Objekt, um es zu serialisieren. Das ist der Grund, warum ich es nicht sofort serialisieren möchte.

Antwort

5

Sie können auf verwandte Gebiete über values() ohne die Notwendigkeit select_related() zu verwenden (nur diese werden ohne nachfolgenden Nachschlag geholt werden):

MyModel.objects.values('author__id', 'author__name') 

Dies wird die folgende Struktur zurück:

[{'author__id': 1, 'author__name': 'Dave'}, {...}] 

Wenn Sie benötigen es in einer verschachtelten Struktur, die Sie anschließend umwandeln müssen.

Beachten Sie, dass für M2M-Relationen ein Listeneintrag pro M2M-Beziehung zurückgegeben wird, also wahrscheinlich kein gewünschter Effekt. Aber für OneToOne/ForeignKey-Beziehungen funktioniert es gut.