Метод values
Метод values применяется к QuerySet и возвращает новый QuerySet, который содержит не объекты модели, а словари. Ключи словарей - это имена полей, переданные в метод, а значения - соответствующие значения из базы данных. Если не передавать аргументы, метод вернёт все поля модели в виде словарей. Это полезно, когда нужно получить данные в формате, близком к JSON, или уменьшить нагрузку на память при работе с большим количеством объектов.
Синтаксис
Model.objects.values(*fields)
Метод принимает произвольное количество аргументов - имен полей модели. Если аргументы не указаны, возвращаются все поля.
Пример
Рассмотрим модель Article с полями title и content. Получим значения только этих полей:
from myapp.models import Article
# Get values of 'title' and 'content' fields
articles_data = Article.objects.values('title', 'content')
for article_dict in articles_data:
print(article_dict)
Результат выполнения кода:
{"title": "First Article", "content": "Content of first article"}
{"title": "Second Article", "content": "Content of second article"}
Пример
Если вызвать values без аргументов, то будут получены все поля модели:
from myapp.models import Article
# Get all fields as dictionaries
all_data = Article.objects.values()
for item in all_data:
print(item)
Результат выполнения кода:
{"id": 1, "title": "First Article", "content": "Content of first article", "created_at": "2025-01-01T10:00:00Z"}
{"id": 2, "title": "Second Article", "content": "Content of second article", "created_at": "2025-01-02T12:30:00Z"}
Пример
Метод values можно комбинировать с фильтрацией и агрегацией. Например, получим только заголовки опубликованных статей:
from myapp.models import Article
# Filter published articles and get only titles
published_titles = Article.objects.filter(status='published').values('title')
for title_dict in published_titles:
print(title_dict)
Результат выполнения кода:
{"title": "First Article"}
{"title": "Third Article"}
Смотрите также
-
метод
values_list,
который возвращает кортежи значений вместо словарей -
метод
only,
который загружает только указанные поля в объекты -
метод
defer,
который откладывает загрузку указанных полей -
метод
annotate,
который добавляет аннотированные поля вQuerySet