Django values_list vs values
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Horror Game Menu Looping
--
Chapters
00:00 Question
00:36 Accepted answer (Score 449)
01:09 Answer 2 (Score 98)
01:53 Answer 3 (Score 5)
02:54 Answer 4 (Score 5)
03:08 Thank you
--
Full question
https://stackoverflow.com/questions/3720...
Accepted answer links:
[values()]: https://docs.djangoproject.com/en/stable...
[values_list()]: https://docs.djangoproject.com/en/stable...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #python3x #django #djangomodels #djangoqueryset
#avk47
ACCEPTED ANSWER
Score 500
The values() method returns a QuerySet containing dictionaries:
<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>
The values_list() method returns a QuerySet containing tuples:
<QuerySet [(1,), (2,)]>
If you are using values_list() with a single field, you can use flat=True to return a QuerySet of single values instead of 1-tuples:
<QuerySet [1, 2]>
ANSWER 2
Score 112
values()
Returns a QuerySet that returns dictionaries, rather than model instances, when used as an iterable.
values_list()
Returns a QuerySet that returns list of tuples, rather than model instances, when used as an iterable.
distinct()
distinct are used to eliminate the duplicate elements.
Example:
>>> 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}]
ANSWER 3
Score 5
You can get the different values with:
set(Article.objects.values_list('comment_id', flat=True))
ANSWER 4
Score 1
The best place to understand the difference is at the official documentation on values / values_list. It has many useful examples and explains it very clearly. The django docs are very user freindly.
Here's a short snippet to keep SO reviewers happy:
values
Returns a QuerySet that returns dictionaries, rather than model instances, when used as an iterable.
And read the section which follows it:
value_list
This is similar to values() except that instead of returning dictionaries, it returns tuples when iterated over.