【发布时间】:2026-02-22 21:50:01
【问题描述】:
我根据模型创建了一个表单。该模型有一个 many2many 字段。我这样定义字段:
contacts = models.ManyToManyField(Contact, blank=True, null=True)
我现在想知道为什么生成的表单说该字段不能为空。当我没有为联系人字段选择联系人时,我总是收到错误消息“此字段是必需的。”。
怎么了?
【问题讨论】:
标签: django django-forms
我根据模型创建了一个表单。该模型有一个 many2many 字段。我这样定义字段:
contacts = models.ManyToManyField(Contact, blank=True, null=True)
我现在想知道为什么生成的表单说该字段不能为空。当我没有为联系人字段选择联系人时,我总是收到错误消息“此字段是必需的。”。
怎么了?
【问题讨论】:
标签: django django-forms
在您的表单声明中将此字段标记为required=False
class MyForm(forms.ModelForm):
contacts=forms.ModelMultipleChoiceField(queryset=Contact.objects.all(),required=False)
class Meta:
model=MyModel
【讨论】:
您可能在添加blank=True, null=True 之前添加了syncdb?
syncdb 只会在数据库中不存在表时创建表。必须直接使用 SQL 或使用迁移工具(例如 South)在数据库中手动更改模型。
当然,如果你还处于早期开发阶段,删除数据库并再次运行syncdb会更容易。
【讨论】:
您对 null=True 的使用在这里令人困惑。 manyToMany 字段导致第三个表将一个模型与另一个模型相关联。例如
Business <-> Contact
如果business.contacts 为空,则不会在此表中输入任何记录。 null=True 会让我觉得您打算将 NULL 记录添加到此表中,这似乎无效。
通常您会关闭两个这些属性。
【讨论】: