0

に応じてテンプレートに結果をフォーマットするためにどのように私はitertoolsチェーンに私は一度に2つの異なるモデルで作業することを可能にするビュー、感謝を持っています。私はテンプレート内のテーブル内に2つの連鎖モデルのインスタンスをレンダリングしています。インスタンスがあるモデルから別のモデルである場合には、テーブルの行を別々にフォーマットする必要があります。チェーンDjangoのモデル:特定のモデル

基本的には、2つのモデルを連鎖してテーブルにインスタンスを表示しています。モデルAのインスタンスを含むテーブルのすべての行は、黄色の背景とモデルBのインスタンスを含むすべての行にフォーマットする必要があります代わりに青い背景を持つ必要があります。

これは図である:ロジックで

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 

、私はテンプレートに必要があると思いますが、このようなものになるだろう:

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

    (etc) 

else 

    (etc) 

質問です:どのように私はそれを表現しなければならないは、に属していますか?

テンプレートタグを調べたが、適切な方法が見つからなかった。

ありがとうございます。

+0

は、あなたのモデルは、任意の固有の識別特性を持っていますか? –

+0

いいえ、主に同じ属性(名前、説明など)を共有しています。 – Giulia

+0

待って、それらは全く異なる属性を持っています、私はそれを使用できますか? – Giulia

答えて

0

私はコメントで述べたように、あなたはモデル自体を特定するのではなく、それがリストにあるかどうかをチェックする方法を探す必要があります。モデル名にアクセスする組み込みの方法がありますが、残念ながらそれは_meta属性の中にあり、テンプレートでアンダースコアで始まる属性を使用することはできません。

は、だからではなく、私はあなたのクラス定義に1を加えるだけで推薦:

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

今、あなただけ行うことができます。

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