我正在努力(由于是 django 的新手)如何通过当前的详细信息视图 ID 过滤对象。
例如,我正在编写一个测试应用程序,允许"场地"拥有自己的详细信息页面,在该页面上他们可以显示其"菜单"项、"营业时间"等。
这是我从视图发送到模板的内容:
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
我可以轻松地从该模型中获取所有开放时间,但这在所有用户之间共享。我正在尝试按当前页面的 id 过滤它。我可以使用 {{ venue.id }} 在详细信息页面上访问它,但我似乎无法将其与其他任何东西结合在一起,以便仅获取该特定 id 的营业时间菜单项。
在详细信息视图的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 }}
访问场地。