Lista wartości Django vs wartości
W Django, jaka jest różnica między tymi dwoma:
Article.objects.values_list('comment_id', flat=True).distinct()
Vs
Article.objects.values('comment_id').distinct()
Moim celem jest uzyskanie listy unikalnych identyfikatorów komentarzy pod każdym Article
. Przeczytałem dokumentację (i faktycznie zastosowałem oba podejścia). Wyniki jawnie wydają się podobne.
4 answers
The values()
metoda zwraca QuerySet zawierający słowniki:
<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>
The values_list()
metoda zwraca QuerySet zawierający krotki:
<QuerySet [(1,), (2,)]>
Jeśli używasz values_list()
z pojedynczym polem, możesz użyć flat=True
, aby zwrócić zestaw pojedynczych wartości zamiast 1-krotek:
<QuerySet [1, 2]>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-10 10:40:35
Values ()
Zwraca zestaw zapytań, który zwraca dictionaries
, a nie instancje Modelu, gdy jest używany jako iterowalny.
Values_list ()
Zwraca zestaw zapytań, który zwraca list of tuples
, a nie instancje Modelu, gdy jest używany jako iterowalny.
Distinct ()
Różne są używane do eliminate the duplicate
elementów.
Przykład:
>>> list(Article.objects.values_list('id', flat=True)) # flat=True will remove the tuples and return the list
[1, 2, 3, 4, 5, 6]
>>> list(Article.objects.values('id'))
[{'id':1}, {'id':2}, {'id':3}, {'id':4}, {'id':5}, {'id':6}]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-09 10:42:46
Możesz uzyskać różne wartości za pomocą:
set(Article.objects.values_list('comment_id', flat=True))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-11 08:59:26
Najlepszym miejscem do zrozumienia różnicy jest oficjalna dokumentacja values / values_list . Ma wiele przydatnych przykładów i wyjaśnia to bardzo jasno. Dokumenty django są bardzo wolne od użytkownika.
Oto krótki fragment, który sprawi, że recenzenci będą zadowoleni:
Wartości
Zwraca zestaw zapytań, który zwraca słowniki, a nie instancje Modelu, gdy jest używany jako iterowalny.
I przeczytaj poniższy rozdział it:
Value_list
Jest to podobne do values() z tym, że zamiast zwracać słowniki, zwraca krotki po iteracji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-11 12:00:37