2016-02-24 15 views
7

Chiedo a questa domanda ancora una volta (it was asked back in 2009),Come combinare select_related() e value()? (2016)

Sappiamo che c'è un metodo values() di QuerySet, quando c'è una ForeignKey (autore, per esempio), è risultato simile:

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

voglio un risultato simile:

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

ha qualcosa chang edito nelle versioni più recenti di Django?

Voglio convertire il set di query in una combinazione di elenchi e dizionari, è possibile?

Quindi prenderò questo oggetto e lo inserirò in un oggetto più grande per serializzarlo. È il motivo per cui non voglio serializzarlo subito.

risposta

5

È possibile accedere a campi correlati tramite values() senza la necessità di utilizzare select_related() (solo questi saranno recuperati senza successiva ricerca):

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

Ciò restituirà la seguente struttura:

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

Se ne hai bisogno in una struttura nidificata dovresti trasformarla in seguito.

Si noti che per le relazioni M2M, questo restituisce una voce di elenco per relazione M2M, quindi probabilmente non è un effetto desiderato. Ma per le relazioni OneToOne/ForeignKey funziona perfettamente.