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

标签 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)

之后,我运行迁移命令,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/

相关文章:

python - 将列和值与行匹配的函数 - DataFrame 的交集

python - 从另一个数据帧计算日期之间的出现次数(给定 ID 值)

mysql - 在内部查询中引用外部查询(更新)列会在 MySQL 上出现错误

mysql - 如何搜索多个多边形内相交的所有点?

python - 如何检查这是否是 Django 中的索引页面?

python - 将属性转换为 Django 模型字段

python - DRF 发布到 ViewSet 而不写入模型

Python grequests 需要很长时间才能完成

python - Django 无效 block 标记 : 'endfor' , 预期 'endblock'

mysql - Golang, mysql : Error 1040: Too many connections