0

J'ai une vue qui me permet de travailler avec deux modèles différents à la fois, grâce à la chaîne itertools. Je rends les instances des deux modèles chaînés à l'intérieur d'une table de mon modèle et j'ai besoin que les lignes de la table soient formatées différemment dans le cas où les instances proviennent d'un modèle plutôt que de l'autre. Donc, fondamentalement: je chaîne deux modèles et affiche leurs instances dans une table, et toutes les lignes de la table qui contiennent des instances du modèle A doivent être mises en forme avec un fond jaune et toutes les lignes contenant des instances du modèle B devrait avoir un fond bleu à la place.Chaining modèles Django: comment formater les résultats sur le modèle selon le modèle spécifique

est la vue:

class BaseView(generic.ListView): 
    template_name = 'base/base_list.html' 
    context_object_name = 'base_list' 

    def get_queryset(self): 
     queryset = Document.objects.order_by('due_date') 
     return queryset 

    def get_context_data(self, **kwargs): 
     context = super(BaseView, self).get_context_data(**kwargs) 
     context['object_list'] = sorted(
      itertools.chain(Program.objects.all(), Document.objects.all()), 
      key=attrgetter('validity_date'), 
      reverse=True) 
     return context 

Dans la logique, ce que je avais besoin dans le modèle serait quelque chose comme ceci:

if 
    object in object_list ***belongs*** to Program.objects.all() 

    (etc) 

else 

    (etc) 

La question est: comment dois-je exprimer que appartient? J'ai également regardé dans les balises de modèle mais n'ai pas pu trouver la bonne manière d'aller.

Merci d'avance.

+0

Faites vos modèles ont des caractéristiques uniques d'identification? –

+0

Non, ils partagent principalement les mêmes attributs (nom, description ...). – Giulia

+0

Attendez, ils ont seulement un attribut complètement différent, puis-je l'utiliser? – Giulia

Répondre

0

Comme je l'ai mentionné dans les commentaires, vous devriez chercher un moyen d'identifier le modèle lui-même plutôt que de vérifier s'il figure dans une liste. Il existe un moyen intégré d'accéder au nom du modèle, mais malheureusement, cela se trouve dans l'attribut _meta et vous n'êtes pas autorisé à utiliser les attributs qui commencent par des traits de soulignement dans un modèle.

Ainsi, au lieu que je recommande d'ajouter simplement un à vos définitions de classe:

class Program(models.Model): 
    model_name = 'Program' 
    ... 

Maintenant, vous pouvez juste faire:

{% if object.model_name == 'Program' %} 
    ... 
{% else %} 
    ... 
{% endif %}