删除带有数据库模型的第三方 Django 应用程序的最佳方法是什么?

如何解决删除带有数据库模型的第三方 Django 应用程序的最佳方法是什么?

我想删除 Django 项目中的第三方应用程序。我的问题是,如果我只是从 INSTALLED_APPS删除它,它在我的数据库中创建的所有模型和关联表都将保留。

我知道我可以在之后手动删除那些表,但我希望这是自动化的(因为这个项目有多个正在运行的实例,我不想要求人们在升级时运行任何手动命令)。我想知道是否有推荐的或“干净”的方式来处理 Django 迁移。

我在我的一个应用程序(使用此第三方应用程序的应用程序)中创建了一个带有 migrations.DeleteModel(name='ThirdPartyModel') 的迁移文件,但它无法执行,因为该模型由另一个应用程序管理。

还剩下什么来编写带有 DROP TABLE thirdpartyapp_thirdpartymodelDELETE FROM django_content_type WHERE app_label = thirdpartyapp AND model = thirdpartymodel 的 Runsql 迁移。

还有其他选择吗?这些类型的操作应该如何完成?

我使用的是 Django 3.0。

解决方法

首先确保您的所有模型都不依赖于该第三方应用,因此没有外键、一对一字段、多对多关系等。删除其中任何一个并进行迁移。

接下来您要迁移此应用对 zero 所做的更改,以便您可以运行以下命令:

python manage.py migrate <third_party_appname> zero

引用自 migrate [Django docs] 上的文档:

:将数据库架构带到应用命名迁移的状态,但不会在 应用相同的应用程序。这可能涉及取消应用迁移,如果您 以前迁移过命名迁移。你可以使用一个 迁移名称的前缀,例如0001,只要它是唯一的 给定的应用程序名称。使用名称 zero 一路迁移回来 即恢复应用的所有已应用迁移。

这将恢复对数据库所做的所有更改,现在您可以自由地从 INSTALLED_APPS 中删除它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?