使用 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')
在 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')