2017-05-22 2 views
0

Je travaille sur une page où j'ai un event-list page (événements futurs) et un event-review page (événements passés, archives).Comment désactiver le cache pour AppHooks django-cms?

Sur les deux pages, je travaille avec un AppHook django-cms parce que j'ai aussi des vues détaillées.

Le jour suivant l'événement, l'événement doit être caché dans la liste des événements et visible sur la page de révision de l'événement. Mais le problème est que l'événement est toujours dans la page de liste d'événements.

models.py

# Managers 
class EventsManager(models.Manager): 
"""EventsManager.""" 

    def get_all(self): 
     return super(EventsManager, self) \ 
      .filter(is_visible=True) \ 
      .order_by('-date') 

    def get_all_future(self): 
     return super(EventsManager, self) \ 
      .filter(is_visible=True) \ 
      .filter(date__gte=datetime.datetime.now()) \ 
      .order_by('date') 

    def get_all_past(self): 
     return super(EventsManager, self) \ 
      .filter(is_visible=True) \ 
      .filter(date__lt=datetime.datetime.now()) \ 
      .order_by('-date') 

views.py

class EventListView(ListView): 
    template_name = 'event_list.html' 
    queryset = Events.objects.get_all_future() 
    paginate_by = 10 

    @never_cache 
    def dispatch(self, *args, **kwargs): 
     return super(EventListView, self).dispatch(*args, **kwargs) 

class EventArchiveView(ListView): 
    template_name = 'event_archive.html' 
    queryset = Events.objects.get_all_past() 
    paginate_by = 20 

    @never_cache 
    def dispatch(self, *args, **kwargs): 
     return super(EventArchiveView, self).dispatch(*args, **kwargs) 

    def get_context_data(self, **kwargs): 
     context = super(EventArchiveView, self).get_context_data(**kwargs) 
     context['is_arcive'] = True 
     return context 

J'ai essayé d'utiliser @never_cache mais l'événement est toujours sur la page de liste d'événements. Je pense que c'est un problème de mise en cache, mais je ne sais pas vraiment par où commencer la recherche. Aucune suggestion?

Répondre

0

Je viens d'avoir un problème similaire et ce n'était pas un CMS Django lié. J'ai rencontré le problème uniquement sur la production pour une raison quelconque. La solution consistait à utiliser la méthode de classe get_queryset() au lieu de définir mon jeu de requête avec la variable queryset. Pour une raison quelconque, lors de l'exécution de mon application django avec UWSGI, la requête sql était mise en cache et mon filtrage de date était bloqué à la date de ma première requête.

Remplacer:

queryset = Events.objects.get_all_past()

avec:

def get_queryset(self): return Events.objects.get_all_past()