Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
get_queryset() должен отвечать. А он тут статичен, зато вся логика по его созданию и изменению в зависимости от условий размазывается в dispatch(), который суть точка входа и желательно его по возможности вообще не трогать.class PostView(ListView):
model = Post
dispatch() и прочего. Пагинацию тоже не надо использовать низкоуровнево: в ListView, примесью которого является MultipleObjectMixin, она (пагинация) работает по умолчанию (пруф и примеры)class PostView(ListView):
"""
Просмотр списка статей, доступных текущему пользователю
"""
model = Post
context_object_name = 'posts'
template_name = 'posts.html'
def queryset(self):
qs = Post.objects.filter(is_delete=False).order_by('-created_at')
if not request.user.is_authenticated():
qs = qs.exclude(is_private=True)
return qs
class PostsIndex(PaginatedList):
"""
Список статей для главной страницы
"""
def get_queryset(self):
return super(PostsIndex, self).get_queryset().exclude(rating__lt=10)PostView следует читать queryset, а get_querysetrequest, а self.requestМожно вообще все данные отображения свести до одного класса и реализовать классический RESTful.
Просто в данной статье хотелось подчеркнуть особенности использования, показания лучшие стороны в ООП подобных отображений
class Posts(ListView, MultipleObjectMixin):import MultipleObjectMixin
Немного подробностей про Class Based View, ч.1