我们的产品有一个安静的API和一个服务器呈现的应用程序(CMS)。两者共享数据库。两者都是用django写的
两者所需的字段和模型并不相互排斥,有一些仅适用于API,有些特定于CMS,有些是常见的。
我的问题是,如果我在其中一个repos上运行迁移,他们会尝试删除那个特定仓库的模型中不存在的字段,而另一个需要。在两个repos中单独运行迁移会使数据库保持最新并且不会造成问题。
答案 0 :(得分:3)
在两个repos中单独运行迁移会使数据库保持最佳状态 约会并没有造成问题。
不幸的是,没有。如您所料,其中一项更改将尝试覆盖另一项。
最简单的方法是将两个项目合并为一个,这样问题就完全消失了。
如果这不是一个选项,代码的组织方式是否两个项目共享相同的models.py文件?您可以通过将models.py文件和迁移文件夹仅存在于一个项目中来实现此目的。第二个项目可以在它使用的每个models.py文件中都有一个符号链接。诀窍(和困难部分)将确保您永远不会为使用符号链接的应用程序创建迁移。
答案 1 :(得分:3)
另一个有效的选择IMHO(除了合并项目之外)是关闭常见模型上的Django迁移自动化(Meta.managed = False)并创建表创建&版本控制在自己手中。您仍然可以使用django.db.migrations编写迁移脚本,但makemigrations命令不会对这些表执行任何操作。
答案 2 :(得分:3)
这是通过使用Django自己的架构迁移工具解决的。我们用 yoyo migrations现在迁移我们的架构。
答案 3 :(得分:1)
我认为最好的办法是拥有一个包含所有字段的回购。该项目将负责应用迁移。
在其他项目中,您需要一个包含函数allow_migrate的db_router,它将在您的模型类上返回False。
另外,具有不同数据库权限的不同数据库用户可以防止更改表。