使用 Django 通用详细信息视图从 url 请求中传递值

Pass value from url request with Django generic detail view

提问人:J.C 提问时间:5/8/2020 更新时间:5/8/2020 访问量:193

问:

在 GenericList 中,当单击一个时,我重定向到

    url(r'^machine/(?P<pk>[0-9]+)$', MachineDetailView.as_view(), name='machine-detail'),

哪里

class MachineDetailView(DetailView):
    model = Awg
    template_name = 'gui/machine_detail.html'
    context_object_name = 'last_entry'
    ordering = ['-timestamp']

但是,我需要的是获取 AWG 记录,其中 machine.id 是 AWG 中的外键。

在我看来,它看起来像这样:

class MachineDetailView(DetailView):
    last_entry = Awg.objects.filter(machine_id=Machine.objects.filter(id=pk).first()).first()
    model = Awg
    template_name = 'gui/machine_detail.html'
    context_object_name = 'last_entry'
    ordering = ['-timestamp']

这不起作用,因为我不知道如何获取请求的 url 中的内容。 很抱歉,如果菜鸟,我确实尝试查看 django 文档。pk

python django Web 服务器端

评论


答:

3赞 willeM_ Van Onsem 5/8/2020 #1

您可以重写 .get_object(..) 方法 [Django-doc],并进行返回该对象的查询。您可以从 URL 模式中获取参数,通过该模式是包含 URL 参数的字典:pkself.kwargs

class MachineDetailView(DetailView):
    model = Awg
    template_name = 'gui/machine_detail.html'
    context_object_name = 'last_entry'

    def get_object(self, queryset=None):
        return Awg.objects.filter(
            machine_id=self.kwargs['pk']
        ).latest('timestamp')

评论

1赞 J.C 5/8/2020
这确实有效。我不可能自己找到这个。干杯!