我正在尝试运行数据迁移,删除表中的所有行(例如,MyModel
)。还有另一个表指向该表(RelatedModel
)。 RelatedModel
中映射到MyModel
的字段有on_delete=models.SET_NULL
。但是,当我运行迁移时,我得到:
File "/usr/local/lib/python2.7/site-packages/django/db/backends/base/base.py", line 211, in _commit
return self.connection.commit()
IntegrityError: update or delete on table "MyModel" violates foreign key constraint "f2274d6f2be82bbff458f3e5487b1864" on table "RelatedModel"
DETAIL: Key (uuid)=(ywKMUYx7G2RoK9vqqEWZPV) is still referenced from table "RelatedModel".
我在迁移中添加了一个断点并检查了SQL DELETE查询。我在shell中以交互方式运行它们并且它们在事务内部工作,但是当它尝试提交时,迁移仍然会中断。我无法看到哪个查询确切导致此错误,所以我不知道如何调试它。有什么建议?谢谢。
PS:我正在使用Django 1.9.13,Python 2.7,PostgreSQL 10.4。
您可以使用以下管理命令打印特定迁移的SQL语句。
python manage.py sqlmigrate <app label> <migration_name to print sql for>
例如,如果要在django项目中检查hello
应用程序的迁移,并假设您要为0001_initial.py
打印sql语句。比你需要执行以下行。
python manage.py sqlmigrate hello 0001_initial.py
它将打印将在迁移时执行的SQL定义(语句)。
使用django-debug-toolbar查看详细信息。或者尝试:1。根据需要使模型清晰。 2.尝试删除除init文件之外的迁移。 3.删除db文件。 4.现在makemigrations到app 5.然后迁移