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.

Вернуться на верх