我正在努力(由于不熟悉django)如何通过当前的详细信息视图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的开放时间菜单项。
答案 0 :(得分:1)
在详情视图的get_context_data
方法中,您可以使用self.object
访问该对象。因此,filter
可以使用以下内容:
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
。 DetailView
可让您通过模板中的{{ object }}
或{{ venue }}
访问该地点。