使用Django未检测到的自定义SQL添加模型字段

时间:2017-09-20 10:52:45

标签: django django-models

我在模型中添加了一个字段。但是我已经通过自定义SQL查询(Alter Field)将该字段添加到DB中的模型中。现在,当我尝试创建其他迁移文件时,Django会创建迁移,以便在DB中将该字段添加到该模型。 怎么让django不这样做?

我需要在添加对另一个字段的引用之前修改字段的排序规则。 Django Alter Field确实改变了表 - 添加字段,AlterTable-Add Reference 虽然我想要Alter Table-Add Field,Modify Field Collat​​ion,AlterTable-Add Reference。 自定义sql查询写在迁移文件中。

2 个答案:

答案 0 :(得分:1)

您可以使用RunSQL创建具有正确排序规则的字段。调用RunSQL时,使用state_operations参数提供SQL代码的状态更改,以使Django保持最新状态。

以下是Django文档中的一个示例:

from django.db import migrations

class Migration(migrations.Migration):

    operations = [
        migrations.RunSQL(
            "ALTER TABLE musician ADD COLUMN name varchar(255) NOT NULL;",
            state_operations=[
                migrations.AddField(
                    'musician',
                    'name',
                    models.CharField(max_length=255),
                ),
            ],
        ),
    ]

答案 1 :(得分:0)

让django创建将该字段创建为唯一更改的迁移。然后使用--fake标志告诉数据库已经运行了迁移。

./manage.py migrate --fake [app] [migration number]

如果您以后匆匆完成所有迁移,或者您为SQL迁移编写了自定义后退代码,则可能会出现问题。