我在模型上有一个字段:
class SomeModel(models.Model):
some_field = models.CharField(max_length=10, null=True, blank=True)
然后我将模型改为:
class SomeModel(models.Model):
some_field = models.CharField(max_length=10, default='')
当我运行django-admin sqlmigrate somemodels somemigration
检查我的迁移时,我发现了以下更改:
ALTER TABLE "somemodels" ALTER COLUMN "some_field" SET DEFAULT '';
UPDATE "somemodels" SET "some_field" = '' WHERE "some_field" IS NULL;
ALTER TABLE "somemodels" ALTER COLUMN "some_field" SET NOT NULL;
ALTER TABLE "somemodels" ALTER COLUMN "some_field" DROP DEFAULT;
我不明白为什么Django在表中应用DROP DEFAULT
,因为我创建默认值。如果这是正确的,Django如何实现默认值?
有关我的工具的信息:
答案 0 :(得分:4)
对django/db/backends/base/schema.py的评论,从ln开始。 571,详细介绍了这里涉及的步骤:
当使用给定的默认值将列NULL约束更改为NOT NULL时,我们需要执行4个步骤:
- 为新传入写入添加默认值
- 使用新的默认值
更新现有的NULL行- 用NOT NULL替换NULL约束
- 再次删除默认值。
醇>
Django通常不使用内置的SQL默认值来设置值(请记住,Django可以使用默认值的可调用值)。您可以在此rejected bug report中找到更多信息。