483👍
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]>
106👍
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}]
- [Django]-Referencing multiple submit buttons in django
- [Django]-Extend base.html problem
- [Django]-How to mix queryset results?
12👍
values()
returns a QuerySet of dictionaries as shown below:
print(User.objects.all().values()) # Return all fields
# <QuerySet [{'id': 1, 'name': 'John'}, {'id': 2, 'name': 'Tom'}]>
print(User.objects.all().values("name")) # Return "name" field
# <QuerySet [{'name': 'John'}, {'name': 'Tom'}]>
values_list()
returns a QuerySet of tuples as shown below:
print(User.objects.all().values_list()) # Return all fields
# <QuerySet [(1, 'John'), (2, 'Tom')]>
print(User.objects.all().values_list("name")) # Return "name" field
# <QuerySet [('John',), ('Tom',)]>
values_list()
with flat=True
returns a QuerySet of values as shown below. *No or one field with flat=True
is allowed and one field must be the 1st argument with flat=True
which must be the 2nd argument.
print(User.objects.all().values_list(flat=True)) # Return "id" field
# <QuerySet [1, 2]>
print(User.objects.all().values_list("name", flat=True)) # Return "name" field
# <QuerySet ['John', 'Tom']>
print(User.objects.all().values_list(flat=True, "name")) # Error
print(User.objects.all().values_list("id", "name", flat=True)) # Error
- [Django]-Github issues api 401, why? (django)
- [Django]-What's the idiomatic Python equivalent to Django's 'regroup' template tag?
- [Django]-How to use "get_or_create()" in Django?
5👍
You can get the different values with:
set(Article.objects.values_list('comment_id', flat=True))
- [Django]-How to resize an ImageField image before saving it in python Django model
- [Django]-On Heroku, is there danger in a Django syncdb / South migrate after the instance has already restarted with changed model code?
- [Django]-Django – Rotating File Handler stuck when file is equal to maxBytes
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.
- [Django]-Django celery task: Newly created model DoesNotExist
- [Django]-Jquery template tags conflict with Django template!
- [Django]-Choose test database?