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

时间:2015-08-28 21:56:02

标签: python mysql django

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

@Html.DropDownListFor(model => model.Members[index].Contact.RelationId.Value, new SelectList(Model.Relations, "RelationId", "Description"),  Model.Members[index].Contact.RelationId.Value)

之后,我运行迁移命令,并在迁移代码后导出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)

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

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)),
            ],
        ),
    ]

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

1 个答案:

答案 0 :(得分:13)

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

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

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

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