gpt4 book ai didi

python - Django 模型的默认值没有出现在 SQL 中

转载 作者:太空狗 更新时间:2023-10-29 20:45:21 26 4
gpt4 key购买 nike

我创建了以下测试模型。该模型包含各种具有默认值的字段。

class TestModel(models.Model):
name = models.CharField(max_length=32)
x = models.IntegerField(default=0)
y = models.IntegerField(default=1, null=True)
z = models.IntegerField(default=0, null=True, blank=True)

之后,我运行迁移命令,Django 导出以下迁移代码。如您所见,默认值是使用 default 参数填充的。

class Migration(migrations.Migration):

dependencies = [
]

operations = [
migrations.CreateModel(
name='TestModel',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=32)),
('x', models.IntegerField(default=0)),
('y', models.IntegerField(default=1, null=True)),
('z', models.IntegerField(default=0, null=True, blank=True)),
],
),
]

最后,我使用 Django 的迁移命令跟踪了 MySQL 代码。

BEGIN;
CREATE TABLE `base_testmodel` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` varchar(32) NOT NULL,
`x` integer NOT NULL,
`y` integer NULL,
`z` integer NULL
);
COMMIT;

问题:尽管我将默认值设置为 1 和 0,但它并没有出现在 SQL 代码中。这是 Django 的特性吗? - 或者 - 我做错了什么?

最佳答案

当您在 Django 中为模型字段设置默认值时,它不会包含在 Django 生成的 SQL 模式中。

只要您使用 ORM 创建模型实例,那么这并不重要,因为 Django 会设置默认值。但是,如果您使用原始 SQL 创建模型实例,则需要确保在需要时使用该字段的默认值。

有一个ticket 470用于向 SQL 模式添加默认值,但它已关闭,因为无法修复。请记住 default 可以是可调用的也可以是常量。不可能将这些可调用项作为默认值添加到 SQL 模式。

如果您确实需要将默认值添加到 SQL 架构中,您可以手动运行 alter table 语句,或将其添加到迁移中。

关于python - Django 模型的默认值没有出现在 SQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32280343/

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