我应该避免在 Django 迁移中使用模型吗?
Should I avoid using models in django migrations?
我正在处理一个现有的 Django 项目,其中包含如下迁移代码:
someFluffyModel.objects.all().delete()
或
someModel = SomeModel(....)
someModel.save()
现在只要有这样的代码并且更新的迁移更改了反映模型当前版本的模式,从头开始应用迁移就会出现问题。
据我了解,原因是迁移中使用的模型不反映当时迁移中使用的模型。正如我发现的那样,fixtures 可以帮助加载数据,但是删除呢?
从数据库中手动删除数据的首选方式是什么?
抱歉忘了回答我自己的老问题,现在已经好几年了,但以防万一有人对您的迁移感到好奇,您应该始终使用历史模型。原因是您在某个时间点获得了模型(基于模式迁移增量重建)。
def forwards_func(apps, schema_editor):
# We get the model from the versioned app registry;
# if we directly import it, it'll be the wrong version
Country = apps.get_model("myapp", "Country")
这样,如果您尝试在未来某个时候使用模型架构 x''
重新运行 迁移,旧迁移将 运行 使用 x'
并且x
取决于它们的依赖关系。
避免不惜一切代价直接将模型导入迁移。
能够重新进行迁移始终很重要运行,因为这允许您在环境之间向前向后迁移回滚错误的部署,最重要的是 运行 您的测试。如果你做错了,当你到达模式 x' 时,你的测试会在某个时候失败,你必须按照上面提到的正确方法来修复它们。
感谢@Daniel Roseman 那天给我一些 pointers。
我正在处理一个现有的 Django 项目,其中包含如下迁移代码:
someFluffyModel.objects.all().delete()
或
someModel = SomeModel(....)
someModel.save()
现在只要有这样的代码并且更新的迁移更改了反映模型当前版本的模式,从头开始应用迁移就会出现问题。
据我了解,原因是迁移中使用的模型不反映当时迁移中使用的模型。正如我发现的那样,fixtures 可以帮助加载数据,但是删除呢? 从数据库中手动删除数据的首选方式是什么?
抱歉忘了回答我自己的老问题,现在已经好几年了,但以防万一有人对您的迁移感到好奇,您应该始终使用历史模型。原因是您在某个时间点获得了模型(基于模式迁移增量重建)。
def forwards_func(apps, schema_editor):
# We get the model from the versioned app registry;
# if we directly import it, it'll be the wrong version
Country = apps.get_model("myapp", "Country")
这样,如果您尝试在未来某个时候使用模型架构 x''
重新运行 迁移,旧迁移将 运行 使用 x'
并且x
取决于它们的依赖关系。
避免不惜一切代价直接将模型导入迁移。
能够重新进行迁移始终很重要运行,因为这允许您在环境之间向前向后迁移回滚错误的部署,最重要的是 运行 您的测试。如果你做错了,当你到达模式 x' 时,你的测试会在某个时候失败,你必须按照上面提到的正确方法来修复它们。
感谢@Daniel Roseman 那天给我一些 pointers。