2017-09-26 38 views
4

djangoアプリケーションでは、異なるモデルを作成しました。同じテーブル内の2つの異なるモデルのデータを使用するまで、すべてのモデルは正常に見えます。 要約:ホームページでは、両方のモデルのデータを日付順に並べたテーブルを作成する必要があります。2つの異なるdjangoモデルのインスタンスを同じテンプレートの同じテンプレート内に表示するにはどうすればいいですか?

表示する必要がある2つのモデルは次のとおりです。

models.py

class Document(models.Model): 
    number = models.CharField(max_length=10) 
    description = models.CharField(max_length=50) 
    assigned = models.BooleanField 
    validity_date = models.DateField 
    is_issued = models.BooleanField 

class Program(models.Model): 
    name = models.CharField(max_length=25) 
    description = models.CharField(max_length=100) 
    validity_date = models.DateField 

その後、私は私が異なるモデルで作業できるようになるビューを作成しようとしました。

これは私のview.pyです:

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['Programs'] = Program.objects.all() 
     context['Employees'] = Employee.objects.all() 
     return context 

は今どのように私は(有効日付で各エントリを注文、テンプレート内一度に両方のモデルを示す表を作成することができますに関係なく、エントリが属する場合プログラムまたは文書へ)?

ありがとうございます!

答えて

1

最初に両方のモデルを照会し、それらを連鎖して(連結して)、共有属性(つまりvalidity_date)で並べ替える必要があります。あなたは今、単にテンプレートにfinal_combine_listを渡し、あなたが望む方法でそれを表示するには、それをレンダリングすることができ

from itertools import chain 
documents = Documents.objects.all() 
programs = Program.objects.all() 
final_combined_list = sorted(chain(documents,programs),key=lambda instance: instance.validity_date) 

:あなたのような何かを行うことができます。

希望すると便利です。

0
def get_context_data(self, **kwargs): 
    context = super(BaseView, self).get_context_data(**kwargs) 
    context['object_list'] = sorted(
     itertools.chain(Document.objects.all(), Program.objects.all()), 
     key=lambda x: x.validity_date 
    ) 
    return context 
関連する問題