Has*_*aig 107 django django-models django-orm django-queryset
在Django中,以下两者之间有什么区别:
Article.objects.values_list('comment_id', flat=True).distinct()
Run Code Online (Sandbox Code Playgroud)
VS
Article.objects.values('comment_id').distinct()
Run Code Online (Sandbox Code Playgroud)
我的目标是获得每个下面的唯一注释ID列表Article.我已经阅读了文档(实际上已经使用了这两种方法).结果显然似乎相似.
Ala*_*air 190
该values()方法返回包含字典的QuerySet:
<QuerySet [{'comment_id': 1}, {'comment_id': 2}]>
Run Code Online (Sandbox Code Playgroud)
该values_list()方法返回一个包含元组的QuerySet:
<QuerySet [(1,), (2,)]>
Run Code Online (Sandbox Code Playgroud)
如果您使用values_list()单个字段,则可以使用flat=True返回单个值的QuerySet而不是1个元组:
<QuerySet [1, 2]>
Run Code Online (Sandbox Code Playgroud)
Ibr*_*sim 39
返回一个QuerySet dictionaries,当用作可迭代时,它返回而不是模型实例.
返回一个QuerySet list of tuples,当用作可迭代时,它返回而不是模型实例.
不同用于eliminate the duplicate元素.
例:
Article.objects.values_list('id', flat=True) # flat=True will remove the tuples and return the list
[1, 2, 3, 4, 5, 6]
Article.objects.values('id')
[{'id':1}, {'id':2}, {'id':3}, {'id':4}, {'id':5}, {'id':6}]
Run Code Online (Sandbox Code Playgroud)
小智 13
values()返回字典的查询集,如下所示:
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'}]>
Run Code Online (Sandbox Code Playgroud)
values_list()返回元组的 QuerySet,如下所示:
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',)]>
Run Code Online (Sandbox Code Playgroud)
values_list()withflat=True返回值的查询集,如下所示。flat=True*不允许有任何字段或有一个字段,并且一个字段必须是第一个参数,而flat=True第一个参数必须是第二个参数。
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
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以通过以下方式获得不同的值:
set(Article.objects.values_list('comment_id', flat=True))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99779 次 |
| 最近记录: |