Django IndexView не обновляет текущую дату
Я использую Django IndexView
для отображения главной страницы в моем приложении с некоторыми данными.
Данные содержат поле с именем date_time
.
Я хочу отобразить данные для date_time
диапазона, начиная с текущего времени, когда я посещаю страницу, до некоторого момента в будущем
Мой код выглядит следующим образом:
class IndexView(LoginRequiredMixin, generic.ListView):
"""View class for home page"""
template_name = 'core/index.html'
model = Match
context_object_name = 'match_list'
now = datetime.now()
queryset = Match.objects.filter(season__is_active=True, date_time__range=(now, "2050-12-31"))
К сожалению, в Django значение переменной now
не обновляется, когда я посещаю страницу, вместо этого это дата, когда я запускаю приложение Django.
Вызвано ли такое поведение использованием IndexView
? Должно ли вместо него использоваться какое-то другое представление?
Спасибо за ваш вклад.
Необходимо применить фильтр в get_queryset()
, чтобы пересчитать текущую метку времени.
class IndexView(LoginRequiredMixin, generic.ListView):
"""View class for home page"""
template_name = 'core/index.html'
model = Match
context_object_name = 'match_list'
def get_queryset(self):
now = datetime.now()
qs = super().get_queryset()
return qs.filter(season__is_active=True, date_time__range=(now, "2050-12-31"))
Кроме того, вам, вероятно, следует использовать now
из django.utils.timezone
, поскольку этот вариант учитывает часовые пояса.
Вот цитата из Django docs, объясняющая, почему now
(который является атрибутом класса в коде вашего вопроса) не обновляется при посещении страницы.
Примечание
В то время как ваш класс инстанцируется для каждого запроса, отправляемого ему, атрибуты класса, установленные через точку входа as_view(), настраиваются только один раз во время импорта ваших URL.