【发布时间】:2020-01-24 09:28:12
【问题描述】:
在最新的 Django (2.2) 中,当我向这样的模型添加新字段时:
new_field= models.BooleanField(default=False)
Django 为 MySQL 运行以下命令:
ALTER TABLE `app_mymodel` ADD COLUMN `new_field` bool DEFAULT b'0' NOT NULL;
ALTER TABLE `app_mymodel` ALTER COLUMN `new_field` DROP DEFAULT;
COMMIT;
虽然这在更新所有内容时有效,但这是非常有问题的,因为在运行此迁移后旧版本的应用程序无法再创建模型(他们不知道 new_field)。为什么不保留DEFAULTconstraint?
【问题讨论】:
-
这纯粹是一个理论问题,还是您也在寻找解决方案?
-
我正在寻找一种在没有
null=True的情况下安全地添加新字段的方法。用default=False添加BooleanField不起作用。这会使旧版本的应用崩溃。 -
我不明白这最后的评论。您要么想要一个具有两种状态或三种状态的字段:
models.BooleanField()或models.BooleanField(null=True)。无论哪种方式,除非您指定默认值,否则默认值为None,就像您在示例中所做的那样。
标签: mysql django django-models database-migration django-migrations