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

时间:2017-08-30 14:46:37

标签: django django-models django-templates django-1.8

我正在努力(由于不熟悉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的开放时间菜单项。

1 个答案:

答案 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.querysetDetailView可让您通过模板中的{{ object }}{{ venue }}访问该地点。