2016-09-05 1 views
0

J'ai une vue générique qui parfois ne renvoie rien.Django: Gestion des querysets vides en vue générique

Comment puis-je gérer efficacement et élever un 404 dans ce cas?

Mon approche est réussie, mais frappe la base de données.

class MyListView(ListView): 
    template_name = 'template/quest.html' 

    def get_queryset(self, *args, **kwargs): 

     query = MyModel.objects.filter(
      ... 
     ).filter(
      ... 
     ) 

     if query.exists(): 
      return query 
     else: 
      raise Http404 

Répondre

2

Set allow_empty-False:

class MyListView(ListView): 
    allow_empty = False 
    template_name = 'template/quest.html' 

    def get_queryset(self, *args, **kwargs): 
     return MyModel.objects.filter(...) 

Cela soulèvera un Http404 si le résultat de get_queryset() est vide (a une longueur 0).