2017-08-30 3 views
0

現在の詳細ビューIDでオブジェクトをフィルタリングする方法には苦労しています(djangoを初めて使用しているため)。Django 1.8現在のジェネリック詳細ビューのIDでオブジェクトをフィルタリングする方法

例えば、私は「会場」は、独自の詳細ページを持つことができますテストアプリケーションを書いていますし、そのページ上で、彼らは「メニュー」の項目、「OpeningHours」などを表示することができ

ここで何私はありますテンプレートにビューから送ります:

class DetailView(generic.DetailView): 
    model = Venue 
    template_name = 'nmq/detail.html' 

    def get_queryset(self): 
     return Venue.objects.all() 

    def get_context_data(self, **kwargs): 
     context = super(DetailView, self).get_context_data(**kwargs) 
     context['OpeningHours'] = OpeningHours.objects.all() 
     context['Menu'] = Menu.objects.all() 
     context['Venue'] = self.queryset 
     return context 

私は簡単にそのモデルからすべてのOpeningHoursを取得するために管理することができますが、これは、すべてのユーザー間で共有されます。私は現在のページのIDでこれをフィルタリングしようとしています。私は{{venue.id}}を使って詳細ページでこれにアクセスできますが、他のものと一緒にこの特定のIDの営業時間のメニュー項目を取得することはできません。

答えて

1

get_context_data詳細ビューのメソッド内では、self.objectでオブジェクトにアクセスできます。私はあなたがcontext['Venue'] = self.querysetを設定する必要はないと思う

def get_context_data(self, **kwargs): 
    context = super(DetailView, self).get_context_data(**kwargs) 
    context['OpeningHours'] = OpeningHours.objects.filter(venue=self.object) 
    context['Menu'] = Menu.objects.filter(self.object) 
    return context 

:したがって、あなたのようなものでfilterことができます。 DetailViewでは、テンプレート内で{{ object }}または{{ venue }}の会場にアクセスできます。

+0

ありがとうAlasdair!私はフィルタに行っていたし、どこから見えるか分からなかった。これに関する詳細を知るためのドキュメントのセクションのヒント再度、感謝します! – user8467470

+0

[クラスベースの総称ビューの紹介](https://docs.djangoproject.com/ja/1.11/topics/class-based-views/generic-display/)には便利な例がいくつかあります。それ以外に私は他の提案はありません。 – Alasdair

+0

よろしく、ありがとう – user8467470

関連する問題