Метод only
Метод only применяется к QuerySet и возвращает новый QuerySet, содержащий те же объекты, но с загруженными только указанными полями. Остальные поля будут отложенно загружены при обращении к ним. Это полезно, когда вам не нужны все поля модели, а только определенный набор. Метод принимает имена полей в качестве аргументов и может быть вызван цепочкой для уточнения списка загружаемых полей.
Синтаксис
Model.objects.only(*fields)
Пример
Давайте загрузим только поля 'title' и 'created_at' из модели Article:
from myapp.models import Article
articles = Article.objects.only('title', 'created_at')
for article in articles:
print(f"Title: {article.title}, Created: {article.created_at}")
Результат выполнения кода:
"Title: First article, Created: 2026-09-01 10:00:00"
"Title: Second article, Created: 2026-09-02 11:30:00"
Пример
Давайте загрузим только поле 'title' и затем попробуем обратиться к незагруженному полю 'content':
from myapp.models import Article
article = Article.objects.only('title').first()
print(f"Title: {article.title}")
print(f"Content: {article.content}") # This will trigger a lazy load
Результат выполнения кода:
"Title: First article"
"Content: Full content of the article..."
Пример
Давайте используем метод only вместе с другими методами QuerySet для более сложной выборки:
from myapp.models import Article
from datetime import date
articles = Article.objects.filter(
status='published',
created_at__date__gte=date(2026, 1, 1)
).only('title', 'created_at').order_by('created_at')
for article in articles:
print(f"{article.title} - {article.created_at}")
Результат выполнения кода:
"New article 1 - 2026-01-15 09:00:00"
"New article 2 - 2026-01-20 14:30:00"
Смотрите также
-
метод
defer,
который исключает указанные поля из загрузки -
метод
values,
который возвращаетQuerySetсловарей вместо объектов -
метод
values_list,
который возвращаетQuerySetкортежей с данными полей -
метод
select_related,
который загружает связанные объекты в одном запросе