我看到当你添加一个列并想要创建一个schemamigration时,该字段必须有null = True或default = something。
我没有得到的是我最初在模型中编写的许多字段(例如,在最初的模式移植之前 - 或者来自convert_to_south应用程序,我同时执行了两个操作)都没有针对此检查运行,因为我没有null / default错误。
这是正常的吗?
为什么会这样?为什么南方检查这个null /默认的东西呢?
答案 0 :(得分:1)
如果您向已填充了某些行的表添加列,则可以:
要生成不具有默认值的非可空列,您需要以多个步骤添加列。之一:
这些实际上是相同的,它们都将通过更新每一行。
我不知道South,但是根据您所描述的内容,它的目标是生成一个DDL语句来添加列,并且无法像这样在多个步骤中添加它。也许你可以覆盖这种行为,或者你可以使用两次迁移?
相比之下,当您创建表时,显然没有现有数据,因此您可以自由创建不可为空的列。
答案 1 :(得分:0)
如果您的数据库中有现有记录并且您在其中一个表中添加了一列,则必须告诉数据库要放在哪里,南方无法读懂您的想法: - )
因此,除非您将新字段标记为null = True或选择默认值,否则会引发错误。如果您有一个空数据库,则没有要设置的值,但模型字段仍需要基本属性。如果你仔细看看你正在使用的字段类,你会看到django设置了一些默认值,比如max_length和null(取决于字段)。