我在模型中添加了一个字段。但是我已经通过自定义SQL查询(Alter Field)将该字段添加到DB中的模型中。现在,当我尝试创建其他迁移文件时,Django会创建迁移,以便在DB中将该字段添加到该模型。 怎么让django不这样做?
我需要在添加对另一个字段的引用之前修改字段的排序规则。 Django Alter Field确实改变了表 - 添加字段,AlterTable-Add Reference 虽然我想要Alter Table-Add Field,Modify Field Collation,AlterTable-Add Reference。 自定义sql查询写在迁移文件中。
答案 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迁移编写了自定义后退代码,则可能会出现问题。