gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:58:58 24 4
gpt4 key购买 nike

我遇到了表默认值的问题。

例如我有这个模型:

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 uses database defaults to set values on existing rows in a table. It doesn't leave the default values in the database so dropping the default is correct behavior."

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

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

唉,我敢肯定比我聪明的人都能很好地解释他们为什么设计成这样。

关于Django Postgresql 在迁移时删除列默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42370160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com