📅  最后修改于: 2023-12-03 14:40:46.779000             🧑  作者: Mango
在 Django 中,值列表是一个查询集的子集,它只返回一些特定的字段的值,而不是返回整个对象。
值列表主要有两种类型:字典和元组。字典类型的值列表可以通过指定 values
方法的参数来创建,元组类型的值列表则可以通过指定 values_list
方法的参数来创建。
使用字典类型的值列表可以将每一个返回值都转换为一个字典类型。这个字典的键是我们指定的字段名,值则是这个字段所对应的值。比如下面的例子,我们只选择了 name
和 age
两个字段,那么我们得到的每一个结果就变成了一个字典,其中包含了 name
和 age
两个键值对:
>>> from myapp.models import Person
>>> people = Person.objects.values('name', 'age')
<QuerySet [{'name': 'John', 'age': 26}, {'name': 'Jane', 'age': 21}, {'name': 'Bob', 'age': 32}]>
使用元组类型的值列表可以将返回结果转换为元组的形式。元组的第一项是指定的字段1,第二项是字段2,以此类推。比如下面的例子,我们只选择了 name
和 age
两个字段,那么我们得到的每一个结果就变成了一个元组,其中包含了 name
和 age
两个值:
>>> from myapp.models import Person
>>> people = Person.objects.values_list('name', 'age')
<QuerySet [('John', 26), ('Jane', 21), ('Bob', 32)]>
在进行值列表查询的时候,可以只选择需要的字段。这样可以避免返回大量不需要的数据,从而提高查询的效率和速度。
使用值列表返回的结果是不可修改的。因为返回的结果不再是原始的 Person
类型对象,而是转换成了字典或元组类型;这就意味着我们不能再对它们进行修改操作,只能用于只读访问。
使用值列表还可以进行聚合操作,比如我们可以使用 Count
函数来计算 Person
表中有多少行数据:
>>> from myapp.models import Person
>>> total_count = Person.objects.values('id').count()
3