迁移ManyToManyField到null true, blank true未被识别。

34

我对模型进行了更改,从

standard = models.ManyToManyField(Standard)

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

这个应用程序的South模式迁移没有识别到这个更改吗?

与这个未被回答的问题类似: South migrations and changes to many-to-may fields


当您尝试运行 ./manage.py schemamigration yourapp --auto 时,South 到底会说什么? - Daniel Rosenthal
我能想到的唯一可能是你没有保存 models.py,但我非常怀疑这个。很抱歉我无法提供帮助。 - Daniel Rosenthal
只是一个想法:南方应该做些什么吗?ManyToManyField将创建一个中间表,因此它要么在该表中有记录,要么没有。我的意思是,中间表上的两个fk列仍应该是强制性的。如果我理解错了,请原谅! - ppetrid
1个回答

65
那样的行为是正确的:nullManyToManyField 一起使用时在数据库层面上并没有任何意义。声明 ManyToManyField 会导致创建一个中间表来保存关系,尽管 Django 会为您方便地在模型实例上创建一个 standard 属性,但实际上并不存在代表它的可空列。按照定义,关系始终可以有零个实例。
然而,blank=False 在验证方面(例如在使用模型表单(如管理应用程序)时)确实会产生影响,强制用户选择至少一个关系。
(请注意,Django 的内置迁移系统会为几乎任何对模型的更改创建迁移,无论其是否影响数据库。因此,这种更改可能会导致迁移,但不会影响数据库或者您是否可以有零个关系实例。)

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