数据库中默认值的Django实现

2024-05-05 02:11:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个模型上有一个字段是:

class SomeModel(models.Model):
    some_field = models.CharField(max_length=10, null=True, blank=True)

然后我把我的模型改成:

^{pr2}$

当我运行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如何实现默认值?在

有关我的工具的信息:

  • Postgresql 9.5
  • Django 1.11b1

Tags: django模型truedefaultfieldmodelstablecolumn
1条回答
网友
1楼 · 发布于 2024-05-05 02:11:02

django/db/backends/base/schema.py的注释,从ln开始。571,详细说明此处涉及的步骤:

When changing a column NULL constraint to NOT NULL with a given default value, we need to perform 4 steps:

  1. Add a default for new incoming writes
  2. Update existing NULL rows with new default
  3. Replace NULL constraint with NOT NULL
  4. Drop the default again.

Django通常不使用内置的SQL默认值来设置值(请记住,Django可以使用可调用的值作为默认值)。您可以在rejected bug report中找到更多信息。在

相关问题 更多 >