2017-08-30 4 views
1

Je suis en train d'afficher un modèle différent en fonction d'une condition:Si/else dans Django Voir

class RouteList(ListView): 
    model = DailyRoute 
    template_name = 'route_list.html' 

    def get_queryset(self): 
     if DailyRoute.objects.filter(stage = '1').exists(): 
      query_set = DailyRoute.objects.filter(owner=employer, stage = '1').order_by('route') 

     else: 
      query_set = [] 

     return query_set 

Si vrai - aller à 1.html modèle Si Faux - aller au modèle 2.html

Ce qui précède fonctionne uniquement pour le modèle 1.html. Je ne peux pas comprendre comment utiliser correctement les instructions if/else pour renvoyer le modèle correct et query_set pour True/False. Se sentir comme un dope sur celui-ci.

+1

Peut-être que vous pouvez utiliser la méthode 'get_template_names()': https://docs.djangoproject.com/ko/1.11/ref/class-based-views/generic-display/#listview – davyria

Répondre

1

vous pouvez passer outre get_template_names, utilisez cached_property pour la requête unique à la db

from django.utils.functional import cached_property 

class RouteList(ListView): 
    model = DailyRoute 
    template_name = 'route_list.html' 

    @cached_property 
    def stage_exist(self): 
     return DailyRoute.objects.filter(stage = '1').exists() 

    def get_queryset(self): 
     if self.stage_exist: 
      query_set = DailyRoute.objects.filter(owner=employer, stage = '1').order_by('route') 
     else: 
      query_set = DailyRoute.objects.none() 
     return query_set 

    def get_template_names(self): 
     return ['template 1.html'] self.stage_exist else ['template 2.html'] 

et de lire tous les commentaires, ils sont utiles

+0

Parfait et merci pour l'explication détaillée . – William

1

get_queryset() doit retourner un objet QuerySet, de sorte que la solution est de retourner un vide QuerySet, que vous pouvez faire avec le none() function.

Donc retour DailyRoute.objects.none() devrait le faire pour le modèle 2.

0

Si vous envoyez rien au modèle, alors vous pourriez aussi bien utiliser HttpResponseRedirect pour rediriger vers Template2 lorsque la condition est remplie.