Django 1.8 如何按当前通用详细信息视图的 id 过滤对象



我正在努力(由于是 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 }}访问场地。

最新更新