Как работает super().get_queryset() в Django?

Я пытаюсь получить набор вопросов, дата публикации которых предшествует сегодняшней дате, но получаю ошибку in get_queryset raise ImproperlyConfigured(django.core.exceptions.ImproperlyConfigured: IndexView is missing a QuerySet. Define IndexView.model, IndexView.queryset, or override IndexView.get_queryset().

Мой код:

class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        return super().get_queryset().filter(pub_date__lte=timezone.now())

Но этот код работает:

    def get_queryset(self):
        return Question.objects.filter(pub_date__lte=timezone.now())

Что я делаю неправильно? Заранее спасибо

There is a parent with a get_queryset(), but that queryset does not come out of "thin air": you either should specify a .queryset [Django-doc] or .model attribute [Django-doc], such that Django can construct the basic queryset:

class IndexView(generic.ListView):
    model = Question
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        return super().get_queryset().filter(pub_date__lte=timezone.now())

Здесь мы, однако, можем работать с часами базы данных с помощью Now [Django-doc], и поэтому нам не нужно переопределять .get_queryset(…) вообще:

from django.db.models.functions import Now


class IndexView(generic.ListView):
    queryset = Question.objects.filter(pub_date__lte=Now())
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'
Вернуться на верх