J'ai un ListView
(CBV générique) d'événements. Ce ListView
doit être mis à jour de manière dynamique chaque jour, de sorte que les «anciens» événements (c'est-à-dire les événements déjà passés) soient exclus du context
lorsqu'un utilisateur visite la page.Modification dynamique d'un ListView (par jour)
Je viens de remarquer que cette page ne se comporte pas comme prévu (un redémarrage du serveur est requis pour que le ListView
se mette à jour). Je soupçonne que ce soit parce que je utilise la méthode queryset
, et que je devrais faire le traitement plus tôt:
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'
Afin d'atteindre mon résultat souhaité, ce qui est le plus tôt que je devrais en train de modifier la queryset afin qu'il s'exécute chaque fois que la page est chargée?
Ne pas le 'queryset' j'ai indiqué dans ma classe se [passé à get_queryset()] (https://docs.djangoproject.com/en /1.7/ref/class-based-views/mixins-single-object/#django.views.generic.detail.SingleObjectMixin.get_queryset)? – rnevius
Oui, par défaut 'get_queryset()' renvoie l'attribut 'queryset' mais vous n'avez pas besoin du comportement par défaut. Vous devez créer un nouveau jeu de requête pour chaque requête au lieu d'utiliser le même jeu de requête pour toutes les demandes. C'est pourquoi vous devez remplacer cette méthode. – catavaran
En regardant [le code source] (https://github.com/django/django/blob/master/django/views/generic/list.py#L26) a aidé à éclaircir cela. Essentiellement, 'queryset' est défini une fois. Si j'utilise la méthode 'get_queryset()' par défaut, sans la surcharger, la valeur 'queryset' d'origine est utilisée. Cette valeur 'queryset' est déterminée la première fois que la vue est demandée, et elle n'est pas" recalculée "après ce point. C'est pourquoi 'get_queryset()' doit être remplacé. Merci pour l'aide! – rnevius