Метод values_list

Метод values_list применяется к QuerySet и возвращает новый QuerySet, который содержит кортежи с значениями указанных полей модели. В отличие от метода values, который возвращает словари, values_list возвращает кортежи, что позволяет экономить память и ускоряет обработку данных при работе с большими наборами записей. Метод принимает имена полей в качестве аргументов и может быть использован для извлечения конкретных данных из базы данных без создания экземпляров моделей.

Синтаксис

pythonModel.objects.values_list(*fields, flat=False, named=False)

Пример . С одним полем

Получим список названий всех статей:

pythonfrom myapp.models import Article

titles = Article.objects.values_list('title')
for title in titles:
  print(title)

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

python("Article 1",)
("Article 2",)
("Article 3",)

Пример . С параметром flat

Для получения плоского списка значений при выборке одного поля используйте параметр flat=True:

pythonfrom myapp.models import Article

titles = Article.objects.values_list('title', flat=True)
for title in titles:
  print(title)

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

python"Article 1"
"Article 2"
"Article 3"

Пример . С несколькими полями

Получим кортежи с названиями и статусами статей:

pythonfrom myapp.models import Article

articles_data = Article.objects.values_list('title', 'status')
for title, status in articles_data:
  print(f"Title: {title}, Status: {status}")

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

python"Title: Article 1, Status: published"
"Title: Article 2, Status: draft"
"Title: Article 3, Status: published"

Пример . С named=True

Используйте параметр named=True для получения именованных кортежей, что упрощает доступ к полям по имени:

pythonfrom myapp.models import Article

articles = Article.objects.values_list('title', 'status', named=True)
for article in articles:
  print(article.title, article.status)

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

python"Article 1 published"
"Article 2 draft"
"Article 3 published"

Пример . С полями связанной модели

Метод values_list поддерживает обращение к полям связанных моделей через двойное подчеркивание:

pythonfrom myapp.models import Article

article_users = Article.objects.values_list('title', 'author__username')
for title, username in article_users:
  print(f"Article: {title}, Author: {username}")

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

python"Article: Article 1, Author: john_doe"
"Article: Article 2, Author: jane_smith"
"Article: Article 3, Author: john_doe"

Пример . С фильтрацией

Метод values_list можно комбинировать с методом filter для выборки конкретных данных:

pythonfrom myapp.models import Article

published_titles = Article.objects.filter(status='published').values_list('title', flat=True)
for title in published_titles:
  print(title)

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

python"Article 1"
"Article 3"

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

  • метод values,
    который возвращает QuerySet словарей вместо кортежей
  • метод filter,
    который фильтрует QuerySet по заданным условиям
  • метод order_by,
    который сортирует QuerySet по указанным полям
  • метод only,
    который загружает только указанные поля модели