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

时间:2014-06-23 13:28:30

标签: 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)

url

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

视图

class Modedit(UpdateView):

    model = ModTool
    template_name = 'myapp/moderate.html'
    fields = ['priority','status']

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

1 个答案:

答案 0 :(得分: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']

这将在issue_id=<issue_id>上进行查找,其中issue_id是在网址中捕获的问题的主键。

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