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