Django:如何在CreateView中自动填充ForeignKey

3

我正在尝试在创建视图中自动填充ForeignKey字段。当我尝试传递站点ID并在提交时保存它时,我会收到此错误。

Cannot assign "u'2'": "FireAlarm.site" must be a "Site" instance.

models.py

class Site(models.Model):
    ...

class FireAlarm(models.Model):
    site = models.ForeignKey(Site)
    ...

urls.py

url(r'^(?P<site>[0-9]+)/create/$', FireAlarmCreate.as_view(), name='fire-alarm-create'),

views.py

class FireAlarmCreate(CreateView):
    model = FireAlarm
    form_class = FireAlarmForm
    queryset = FireAlarm.objects.all()
    success_url = '/sites/list'

    def form_valid(self, form):
        fire_alarm = form.save(commit=False)
        fire_alarm.site = self.kwargs['site']

        return super(FireAlarmCreate, self).form_valid(form)
1个回答

2

根据错误提示,您无法将站点id 2 分配给外键。

您可以将该id分配给 site_id:

fire_alarm.site_id = self.kwargs['site']

或者首先从数据库中获取站点:
site = Site.objects.get(id=self.kwargs['site'])
fire_alarm.site = site

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接