如何将updateview与ForeignKey/OneToOneField一起使用

yay*_*ayu 3 django django-class-based-views

class ModTool(models.Model):
...
issue = models.OneToOneField(Issue)
priority = models.CharField(max_length=1, choices=PRIORITY, blank=True)
status = models.CharField(max_length=1, choices=STATUS, default='O', blank=True)
Run Code Online (Sandbox Code Playgroud)

网址

url(r'^moderate/(?P<pk>\d+)', ModEdit.as_view(),name='moderation')
Run Code Online (Sandbox Code Playgroud)

视图

class Modedit(UpdateView):

    model = ModTool
    template_name = 'myapp/moderate.html'
    fields = ['priority','status']
Run Code Online (Sandbox Code Playgroud)

此时我无法弄清楚如何设置此视图来编辑具有在pk中给出的问题的onetoonefield的特定ModTool实例.

knb*_*nbk 6

您可以使用slug_fieldslug_url_kwarg属性:

url(r'^moderate/(?P<issue_id>\d+)', ModEdit.as_view(),name='moderation')

class Modedit(UpdateView):
    slug_field = 'issue_id'
    slug_url_kwarg = 'issue_id'
    model = ModTool
    template_name = 'myapp/moderate.html'
    fields = ['priority','status']
Run Code Online (Sandbox Code Playgroud)

这将做在查找issue_id=<issue_id>那里issue_id是在url中捕获的问题的主键.

我已将关键字参数重命名pkissue_id以防止与主键的查找发生名称冲突.否则,将发生一个额外的过滤器,该过滤器使用ModTool主键的值过滤Issue主键.