values()
是 Django 查询 API 中用于选择一组对象的一部分字段并返回一个 QuerySet 对象的函数。
作用
values()
函数的作用是对查询结果进行过滤,只返回需要的字段,并以字典列表的形式呈现。
使用方法
values()
函数的基本语法如下:
queryset.values(*field_names, **annotations)
参数说明:
field_names
:必填,一个或多个字段名,指定需要返回的字段。annotations
:可选,用于在查询中添加聚合函数等计算字段。
使用前需要先引入该函数:
from django.db.models import F, Avg, Count
示例1
假设有一个学生表(Student),包含以下字段:id(学生id)、name(学生姓名)、age(学生年龄)和score(学生分数)。
我们可以通过以下命令来查找学生姓名和分数:
students = Student.objects.values("name", "score")
print(students)
输出结果格式:
<QuerySet [{'name': 'Lucy', 'score': 90}, {'name': 'Tom', 'score': 85}]>
示例2
我们也可以对查询结果进行计算,比如对每个学生的分数求平均值,并将其作为新的字段返回。
students = Student.objects.values("name").annotate(avg_score=Avg("score"))
print(students)
输出结果格式:
<QuerySet [{'name': 'Lucy', 'avg_score': 90.0}, {'name': 'Tom', 'avg_score': 85.0}]>
注意事项
values()
函数会返还一个字典列表,与 QuerySet 对象的类型不同,因此在使用时需要注意数据类型的变化。- 如果未指定
field_names
参数,则会将所有字段全部返回,与直接使用all()
函数获取所有字段的效果相同,但值的类型不同。