0

У меня есть ListView (общий CBV) событий. Этот ListView должен динамически обновляться каждый день, так что «старые» события (т. Е. События, которые уже произошли) исключаются из context, когда пользователь посещает страницу.Динамическое изменение ListView (по дням)

Я просто заметил, что эта страница на самом деле не ведет себя так, как ожидалось (для обновления ListView требуется перезагрузка сервера). У меня есть подозрение, что это потому, что я использую метод queryset, и что я должен делать обработку ранее:

class EventDirectoryView(ListView): 
    model = Event 
    # Exclude objects that are expired 
    queryset = Event.objects.exclude(deadline__lt=(date.today()-timedelta(1))) 
    template_name = 'event-directory.html' 

Для того, чтобы достичь моего желаемого результата, то, что является самым ранним я должен быть модифицируя queryset, чтобы он запускался каждый раз, когда страница загружается?

ответ

1

Вы должны переопределить get_queryset() метод:

class EventDirectoryView(ListView): 
    ... 
    def get_queryset(self): 
     return Event.objects.exclude(deadline__lt=(date.today()-timedelta(1))) 
+0

ли не 'queryset' я указал в своем классе получить [передается get_queryset()] (https://docs.djangoproject.com/en /1.7/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.get_queryset)? – rnevius

+0

Да, по умолчанию 'get_queryset()' возвращает атрибут 'queryset', но вам не требуется поведение по умолчанию. Вам нужно создать новый запрос для каждого запроса вместо того, чтобы использовать один и тот же запрос для всех запросов. Вот почему вы должны переопределить этот метод. – catavaran

+0

Глядя на [исходный код] (https://github.com/django/django/blob/master/django/views/generic/list.py#L26), он помог разобраться. По сути, 'queryset' определяется один раз. Если я использую метод 'get_queryset()' по умолчанию, не переопределяя его, используется исходное значение 'queryset'. Это значение 'queryset' определяется при первом запросе представления, и после этой точки оно не пересчитывается. Вот почему 'get_queryset()' необходимо переопределить. Спасибо за помощь! – rnevius

 Смежные вопросы

  • Нет связанных вопросов^_^