我创建了一个压缩后的Django迁移,看起来像这样:
add field "name"
run sql "CREATE FUNCTION x"
add field "age"
remove field "name"
run sql "DROP FUNCTION x"
由于Django无法完全优化两个run sql
块之间的代码,因此预计add field "name"
和remove field "name"
不会被优化。但是,我知道这两个SQL运行不会影响任何相关性,因此我可以手动删除run sql
部分。
手动删除了run sql
部分后,有什么办法让Django仅对结果运行优化步骤?
答案 0 :(得分:1)
我编写了一个命令,该命令使用Django的MigrationOptimizer
重写单个迁移文件,专门用于这种情况。我将其发布为要点:
https://gist.github.com/jhillacre/7fa8c182dd821387d4cf1fdb9371dcd7
我已经使用python 3.6在Django 1.11中对此进行了测试。不确定Django 2+是否需要更改。
陷阱包括:
我总是比较优化的迁移和原始迁移,以确保对initial
和dependencies
的更改被还原。
或者,您可以在使用RunPython
或RunSql
elidable
参数压扁之前删除这些操作。从文档中:
可选的elidable参数确定挤压迁移时是否将操作删除(消除)。 link