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

Ber*_*diz 10 python mysql django

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

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)
Run Code Online (Sandbox Code Playgroud)

之后,我运行迁移命令,并在迁移代码后导出Django.如您所见,默认值使用默认参数填充.

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)),
            ],
        ),
    ]
Run Code Online (Sandbox Code Playgroud)

最后,我使用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;
Run Code Online (Sandbox Code Playgroud)

问题:虽然,我将默认值设置为1和0,但它不会出现在SQL代码中.这是Django的一个功能吗? - 或 - 我做错了什么?

Ala*_*air 15

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

只要您使用ORM创建模型实例,那么这无关紧要,因为Django将设置默认值.但是,如果使用原始SQL创建模型实例,则需要确保在需要时使用字段的默认值.

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

如果确实需要将缺省值添加到SQL模式,则可以手动运行alter table语句,或将其添加到迁移中.

  • 更新:链接的票证在大约5个月前更改为"已接受"/"新功能",因此最终可能会在某个时候出现. (4认同)