NOT NULL约束失败:尝试保存表单

2024-04-18 09:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

注意:Django/Python初学者,希望这个问题是清楚的。在

我正在创建一个表单,其中一个模型(Guest)的多个实例可以在一个表单中一次编辑,并同时提交。在

此来宾模型链接到父模型Invite,这意味着多个来宾附加到单个Invite。在

我已经为每个客人创建了一个表单集并显示它,但是当我提交它时,我得到了以下错误。在

NOT NULL constraint failed: app_guest.invite_id

我假设这是因为它没有一个invite来保存数据,但是我不知道把它请求的这个invite_id放在哪里。在

以下是我目前的看法:

^{pr2}$

这是我的客座模特:

@python_2_unicode_compatible
class Guest(models.Model):
    invite = models.ForeignKey(Invite, on_delete=models.CASCADE)
    guest_name = models.CharField(max_length=200)
    diet = models.CharField(max_length=250)
    transport = models.NullBooleanField(default=False, null=True)
    attending = models.NullBooleanField(null=True)

    def __str__(self):
        return self.guest_name

表格如下:

class ExtraForm(forms.ModelForm):
    diet = forms.CharField(max_length=128, help_text="Please enter your diet restrictions", required=False)
    transport = forms.BooleanField(initial=False, help_text="Will you be needing transport?", required=False)

    # An inline class to provide additional information on the form.
    class Meta:
        # Provide an association between the ModelForm and a model
        model = Guest
        fields = ('diet', 'transport')

任何帮助都将不胜感激。即使是关于如何更好地构建这一切的建议也会很有帮助。谢谢。在


Tags: 模型false表单modelsformsinvitelengthmax
1条回答
网友
1楼 · 发布于 2024-04-18 09:26:55

您的表单不包括invite字段,因此必须在保存到数据库之前设置它。在

if form.is_valid():
    # Save the new category to the database.
    instance = form.save(commit=False)
    instance.invite = invite
    instance.save()  # save to the db, now that we have set the invite
    ...

相关问题 更多 >