将 ManyToManyField 迁移为 null tr​​ue,空白 true,无法识别

Posted

技术标签:

【中文标题】将 ManyToManyField 迁移为 null tr​​ue,空白 true,无法识别【英文标题】:Migrating ManyToManyField to null true, blank true, isn't recognized 【发布时间】:2013-08-17 01:45:07 【问题描述】:

我已经从

进行了模型更改
standard = models.ManyToManyField(Standard)

standard = models.ManyToManyField(Standard, blank=True, null=True)

此应用的南模式迁移无法识别更改?

类似于这个问题,没有答案: South migrations and changes to many-to-may fields

【问题讨论】:

当你尝试运行 ./manage.py schemamigration yourapp --auto 时,South 到底说了什么? 我唯一能想到的是你没有保存models.py,但我非常怀疑。抱歉,我帮不上忙。 只是一个想法:南方应该做点什么吗? ManyToManyField 将创建一个中间表,因此您在该表中是否有记录。我的意思是两个 fk 列在中间表上仍然应该是强制性的。对不起,如果我弄错了! 【参考方案1】:

这种行为是正确的:nullManyToManyField 一起使用时,在数据库级别没有任何意义。 ManyToManyField 的声明会导致创建一个中间表来保存关系,尽管 Django 会为您的方便在模型实例上创建一个 standard 属性,但没有代表它的实际列可以为空。根据定义,关系的实例总是可以为零。

尽管如此,blank=False 确实对验证有影响(例如,当使用像管理应用这样的模型表单时),迫使用户选择至少一个关系。

(请注意,Django 的内置迁移系统会为模型的任何更改创建迁移,无论它是否影响数据库。因此,此更改可能会导致迁移,但不会影响数据库或者你是否可以有零个关系实例。)

【讨论】:

以上是关于将 ManyToManyField 迁移为 null tr​​ue,空白 true,无法识别的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 django 中的迁移和数据向现有的 ManyToManyField 添加选项

将字段更改为多对多时的 Django 数据迁移

Django 1.8:删除/重命名数据迁移中的模型字段

仅当一个查询中存在关系时才过滤 ManyToManyField

如何将多个模型绑定到一个 ManyToManyField?

Django:如何将数据保存到ManyToManyField?