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

Pass value from url request with Django generic detail view

在 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 请求中的 pk。 抱歉,如果是新手,我确实尝试查看 django 文档。

您可以覆盖 .get_object(..) method [Django-doc],并查询 returns 该对象。您可以通过 self.kwargs 从 url 模式中获取 pk 参数,self.kwargs 是一个包含 URL 参数的字典:

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

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