详解Django的 values() 函数:获取指定字段的值

  • Post category:Python

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() 函数获取所有字段的效果相同,但值的类型不同。