Как работает 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'