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

Django 1.8 How to filter an object by id of current generic Detail View

我正在努力(由于是 django 的新手)如何通过当前详细信息视图 ID 过滤对象。

例如,我正在编写一个测试应用程序,允许 "venues" 拥有自己的详细信息页面,并且在该页面上他们可以显示他们的 "Menu" 项目,"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 的营业时间菜单项。

在详细视图的 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.querysetDetailView 允许您在模板中使用 {{ object }}{{ venue }} 访问场地。