Django模型的默认值不会出现在SQL中

2024-02-18

我创建了以下测试模型。该模型包含各个字段default value.

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;

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


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

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

有一个门票 470 https://code.djangoproject.com/ticket/470用于向 SQL 架构添加默认值,但它已被关闭,因为无法修复。记住比default可以是可调用的也可以是常量。无法将这些可调用项作为默认值添加到 SQL 架构中。

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

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

Django模型的默认值不会出现在SQL中 的相关文章

随机推荐