Метод values

Метод values применяется к QuerySet и возвращает новый QuerySet, который содержит не объекты модели, а словари. Ключи словарей - это имена полей, переданные в метод, а значения - соответствующие значения из базы данных. Если не передавать аргументы, метод вернёт все поля модели в виде словарей. Это полезно, когда нужно получить данные в формате, близком к JSON, или уменьшить нагрузку на память при работе с большим количеством объектов.

Синтаксис

pythonModel.objects.values(*fields)

Метод принимает произвольное количество аргументов - имен полей модели. Если аргументы не указаны, возвращаются все поля.

Пример

Рассмотрим модель Article с полями title и content. Получим значения только этих полей:

pythonfrom 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)

Результат выполнения кода:

python{"title": "First Article", "content": "Content of first article"}
{"title": "Second Article", "content": "Content of second article"}

Пример

Если вызвать values без аргументов, то будут получены все поля модели:

pythonfrom myapp.models import Article

# Get all fields as dictionaries
all_data = Article.objects.values()
for item in all_data:
  print(item)

Результат выполнения кода:

python{"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 можно комбинировать с фильтрацией и агрегацией. Например, получим только заголовки опубликованных статей:

pythonfrom 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)

Результат выполнения кода:

python{"title": "First Article"}
{"title": "Third Article"}

Смотрите также

  • метод values_list,
    который возвращает кортежи значений вместо словарей
  • метод only,
    который загружает только указанные поля в объекты
  • метод defer,
    который откладывает загрузку указанных полей
  • метод annotate,
    который добавляет аннотированные поля в QuerySet