Атрибут queryset
Атрибут queryset класса ListView позволяет явно указать, какой набор объектов должен быть передан в шаблон. В отличие от атрибута model, который автоматически получает все записи из модели, queryset дает возможность применить фильтрацию, сортировку или другие операции сразу на уровне определения класса. Если не задан ни queryset, ни model, представление вызовет ошибку.
Синтаксис
class MyListView(ListView):
queryset = Model.objects.filter(condition)
Пример
Давайте создадим представление, которое выводит только опубликованные статьи:
from django.views.generic import ListView
from myapp.models import Article
class PublishedArticleListView(ListView):
queryset = Article.objects.filter(status='published')
context_object_name = 'articles'
template_name = 'articles/list.html'
Результатом выполнения будет список статей, у которых поле 'status' равно 'published':
[<Article: Первая статья>, <Article: Вторая статья>, <Article: Третья статья>]
Пример
Давайте используем queryset для вывода последних 5 статей по дате создания:
from django.views.generic import ListView
from myapp.models import Article
class RecentArticleListView(ListView):
queryset = Article.objects.order_by('-created_at')[:5]
context_object_name = 'recent_articles'
template_name = 'articles/recent_list.html'
Результат выполнения кода:
[<Article: Последняя статья>, <Article: Предпоследняя статья>]
Пример
Давайте объединим queryset с пагинацией для вывода только активных пользователей по 10 записей на страницу:
from django.views.generic import ListView
from myapp.models import User
class ActiveUserListView(ListView):
queryset = User.objects.filter(is_active=True)
paginate_by = 10
context_object_name = 'users'
template_name = 'users/list.html'
Результатом будет набор из 10 активных пользователей на первой странице:
[<User: user1>, <User: user2>, <User: user3>]
Смотрите также
-
атрибут
model,
который задает модель для автоматической выборки всех записей -
атрибут
paginate_by,
который включает пагинацию и задает количество объектов на странице -
атрибут
context_object_name,
который задает имя переменной контекста для списка объектов -
метод
get_queryset,
который позволяет динамически переопределять набор объектов