2016-02-24 20 views
7

Pytam jeszcze raz to pytanie (it was asked back in 2009),Jak połączyć select_related() i value()? (2016)

Wiemy, że jest values() metoda QuerySet, gdy istnieje ForeignKey (autor, na przykład), to spowodować jak:

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

Chcę wynikiem jak:

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

coś chang ed w nowszych wersjach Django?

Chcę przekonwertować zestaw zapytań na zestawienie list i słowników, czy to możliwe?

Następnie wziąłem ten obiekt i umieściłem go w większym obiekcie, aby go przekształcić do postaci szeregowej. To jest powód, dla którego nie chcę serializować go od razu.

Odpowiedz

5

Można uzyskać dostęp do powiązanych pól poprzez values() bez konieczności uzywania select_related() (tylko one będą pobierane bez późniejszego odnośnika):

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

ten powróci następującą strukturę:

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

Jeśli potrzebujesz go w strukturze zagnieżdżonej, którą musisz potem przekształcić.

Należy zauważyć, że dla relacji M2M zwraca jeden wpis na liście dla relacji M2M, więc prawdopodobnie nie jest to pożądany efekt. Ale dla relacji OneToOne/ForeignKey działa dobrze.