django - 移除 ForeignKey 后迁移到第三方模型

我正在删除项目中的一些无用代码,我有机会删除自项目启动以来我们一直在使用的对第三方应用程序的依赖。我们的一个模型在第三方应用程序中有一个模型的外键,我在尝试对项目的新实例应用迁移时遇到了麻烦。

示例模型:

from django.db import models
from thirdparty.models import ThirdPartyModel

class MyModel(models.Model):
    fk = models.ForeignKey(ThirdPartyModel)

删除 MyModel.fk 被 South 检测到并且迁移创建成功。应用迁移并将其回滚也可以。我现在可以从 INSTALLED_APPS 中删除 thirdparty 并提交更改(新迁移和 settings.py)。

当我在另一台机器上克隆存储库时,问题就来了。 ./manage.py syncdb 按预期运行并创建所有不受 South 管理的表,但 ./manage.py migrate myapp 在为(早期版本)创建表时失败的)MyModel 因为无法创建 thirdparty_thirdpartymodel 的外键(正如预期的那样,因为 thirdparty 不再位于 INSTALLED_APPS 中所以没有创建任何表)。

是否有标准方法来处理删除外部依赖项?现在是否适合重置我的迁移?

最佳答案

这是一个老问题,但它仍然有效,甚至独立于 South,并且也是 Django 迁移的问题。

您应该注意迁移文件的分离方式,以便您可以伪造依赖于不存在的应用程序(从 INSTALLED_APPS 中删除)的迁移。这样,您就可以通过伪造这些迁移来创建新安装,并在现有安装上实际运行这些迁移。

当然,如果您有可能重新开始(比如完全重新启动),您可以删除您的数据库,删除所有现有的迁移文件并简单地创建全新的迁移。所有其他开发人员也将不得不放弃他们的数据库。

如果您拥有现有的生产数据,但仍想从头开始,则可以采用不同的方式来传输数据。 哪种方式最好取决于有多少数据,结构发生了多少变化等:

  • 普通 SQL(在运行新迁移后手动更改数据库,将数据从旧表转移到新表并删除表和外键等)
  • fixtures(通过旧系统中的 Django 转储数据并更改 JSON 以适应新结构)
  • 新旧系统的两个并行安装并通过 Django/Python 脚本传输(比普通 SQL 慢,但您可以使用 Django 模型逻辑,以更舒适的方式应用验证检查、转换等)。

当然,不要在生产中执行此操作,而是在其他地方执行此操作并简单地应用结果。

https://stackoverflow.com/questions/12078420/

相关文章:

wpf - UnhandledExceptionFilter 捕获所有异常但只重新抛出一些异常

html - 在新选项卡中打开链接(在框架设置内)

java - 如何在 MyBatis 中调用返回 Oracle 记录类型的 Oracle 函数

php - 来自另一个用户的 DBus

php - session 提前结束

arm - AOSP 中的工具链

text - 删除属于其他字符串的子字符串

asynchronous - 如果它不存在,如何让nginx重试静态文件

asp.net-mvc-3 - 如何将Web应用程序转换为SaaS?

html - 关闭浏览器后保存 HTML5 SessionStorage