6. 如何选择同一查询集中的某些字段?¶
auth_user
模型中有一些字段,但有时,你不需要使用所有的字段,这样的话,我们可以只请求期望的字段。
Django提供了两种方法实现
- 查询集的 values 和 values_list 方法
- only 方法
比如我们想要获取姓名以R开头的所有用户的 first_name
和 last_name
。为减少数据的工作量,你并不想要获取其他字段。
>>> User.objects.filter(
first_name__startswith='R'
).values('first_name', 'last_name')
<QuerySet [{'first_name': 'Ricky', 'last_name': 'Dayal'}, {'first_name': 'Ritesh', 'last_name': 'Deshmukh'}, {'first_name': 'Radha', 'last_name': 'George'}, {'first_name': 'Raghu', 'last_name': 'Khan'}, {'first_name': 'Rishabh', 'last_name': 'Deol'}]
你可以使用 str(queryset.query)
验证生成的SQL语句:
SELECT "auth_user"."first_name", "auth_user"."last_name"
FROM "auth_user" WHERE "auth_user"."first_name"::text LIKE R%
输出会是字典元素的列表。
另外,你也可以使用:
>> queryset = User.objects.filter(
first_name__startswith='R'
).only("first_name", "last_name")
str(queryset.query)
生成的是:
SELECT "auth_user"."id", "auth_user"."first_name", "auth_user"."last_name"
FROM "auth_user" WHERE "auth_user"."first_name"::text LIKE R%
only
和 values
唯一的不同是 only
还会获取相应的 id
。