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.

Author: Hassan Baig, 2016-05-13

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]>
 295
Author: Alasdair,
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}]
 63
Author: Ibrahim Kasim,
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))
 5
Author: pitu,
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.

 0
Author: run_the_race,
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