6. Как выбрать только некоторые поля в наборе запросов?¶
В модели auth_user
имеется ряд полей. Но иногда вам не нужно использовать все поля. В таких ситуациях мы можем запросить только нужные поля.
Django предоставляет два способа сделать это
Методы values и values_list на queryset.
only_method
Скажем, мы хотим получить first_name
и last_name
всех пользователей, чье имя начинается с R. Вы не хотите получать другие поля, чтобы уменьшить объем работы БД.
>>> queryset = User.objects.filter(
first_name__startswith='R'
).values('first_name', 'last_name')
>>> queryset
<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'}]
Вы можете проверить сгенерированный sql, используя str(queryset.query)
, что дает.
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
.