我创建了以下测试模型。该模型包含具有 默认 值的各种字段。
@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的一个功能吗? - 或 - 我做错了什么?
答案 0 :(得分:13)
当您在Django中为模型字段设置默认值时,它不会包含在Django生成的SQL模式中。
只要您使用ORM创建模型实例,那么这并不重要,因为Django将设置默认值。但是,如果使用原始SQL创建模型实例,则需要确保在需要时使用该字段的默认值。
有一个ticket 470用于向SQL架构添加默认值,但它已被关闭,因为它不会修复。请记住,default
可以是可调用的,也可以是常量。将这些可调用项添加为SQL模式的默认值是不可能的。
如果确实需要将默认值添加到SQL架构中,则可以手动运行alter table语句,或将其添加到迁移中。