Django Postgresql 在迁移时删除列默认值

2024-04-21

我面临表默认值的问题。

例如我有这个模型:

class model1(models.Model):
        field1 = models.CharField(max_length=50, default='My Default Value 1',db_column='field1')
        field2 = models.CharField(max_length=10)

        class Meta:
            db_table = 'model1'

并且 postgresql 表是在没有默认值的情况下生成的:

mydb=# \d model1
                                Table "public.model1"
 Column |         Type          |                      Modifiers                      
--------+-----------------------+-----------------------------------------------------
 id     | integer               | not null default nextval('model1_id_seq'::regclass)
 field1 | character varying(50) | not null
 field2 | character varying(10) | not null
Indexes:
    "model1_pkey" PRIMARY KEY, btree (id)

迁移 sqlmigrate 的输出是:

CREATE TABLE "model1" ("id" serial NOT NULL PRIMARY KEY, "field1" varchar(50) NOT NULL, "field2" varchar(10) NOT NULL);
COMMIT;

但是如果我修改模型中的默认值并运行 makemigrations/migrate 然后我查看 sqlmigrations 输出会在创建后生成一个奇怪的 DROP DEFAULT

ALTER TABLE "model1" ALTER COLUMN "field1" SET DEFAULT 'My Default Value 1 modified';
ALTER TABLE "model1" ALTER COLUMN "field1" DROP DEFAULT;
COMMIT;

是否有我遗漏的内容或不支持列的默认值?


我知道有点晚了,但我也遇到了同样的问题。经过广泛搜索后,我发现了这个

“Django 使用数据库默认值来设置现有行上的值 桌子。它不会在数据库中保留默认值,因此会丢失 默认是正确的行为。”

https://code.djangoproject.com/ticket/28000 https://code.djangoproject.com/ticket/28000

所以看起来这就是 django 的设计方式。这让我很烦恼,因为当我使用 MySQL 插入数据时,我收到了关于没有默认值的警告。

唉,我相信比我聪明的人可以想出一个很好的解释来解释为什么他们要这样设计。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Postgresql 在迁移时删除列默认值 的相关文章

随机推荐