2017-08-30 44 views
0

由於當前的詳細信息視圖ID,如何過濾對象,我掙扎着(由於是django的新手)。Django 1.8如何通過當前通用ID的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訪問該對象。

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 

我不認爲你需要設置context['Venue'] = self.queryset:因此,你可以像filterDetailView允許您訪問模板中的{{ object }}{{ venue }}

+0

非常感謝Alasdair!我已經到了過濾器,並不知道從哪裏看:)。有關哪些文檔的哪一部分可以瞭解更多信息?再次感謝! – user8467470

+0

[基於類的泛型視圖介紹](https://docs.djangoproject.com/en/1.11/topics/class-based-views/generic-display/)有一些例子可能會對您有所幫助。除此之外,我沒有任何其他建議。 – Alasdair

+0

太好了,謝謝 – user8467470