如何删除Django模型而不是数据库?

Posted

技术标签:

【中文标题】如何删除Django模型而不是数据库?【英文标题】:How to delete the Django model but not the database? 【发布时间】:2018-12-28 06:02:41 【问题描述】:

我正在使用 Django 运行生产服务器。我想删除不再需要的模型。迁移使将它们应用到数据库变得容易。但是,我不想删除到目前为止积累的数据库。有没有办法认为迁移管理器已经被删除而不实际删除数据库?

【问题讨论】:

【参考方案1】:

有两种基本方法:更改运行 migrate 的方式,或更改迁移本身。

如果这是对现有数据库的一次性更改,那么您只需运行 migrate--fake 选项即可。

不过,如果您想让它更广泛地应用,--fake 方法太脆弱了。您必须始终记住将此迁移与有丢失数据风险的其他迁移分开运行。

在这种情况下,最好编辑迁移本身。具体来说,您可以将 DeleteModel 操作转换为 RunSQL 操作,该操作仅将删除记录为使用 state_operations 参数完成。

走哪条路可能取决于这个问题的答案:如果您要从头开始创建数据库,您是否希望未使用的表仍然存在?如果是这样,请编辑迁移文件。如果没有,请使用 --fake 每个现有数据库运行一次。

【讨论】:

【参考方案2】:

您需要运行带有--fake 选项的migrate admin 命令。

--假的

将迁移标记到目标迁移(遵循上述规则) 如应用,但没有实际运行 SQL 来改变你的 数据库架构。

这是供高级用户操作当前 如果他们手动应用更改,则直接迁移状态;是 警告使用 --fake 会冒着迁移状态的风险 表进入需要手动恢复的状态 迁移运行正常。

更多解释可以参考Django document。

【讨论】:

以上是关于如何删除Django模型而不是数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Django 删除确认

Django ClearableFileInput - 如何检测是不是删除文件

如何在 Django 中删除单个模型,并留下其他模型

当我从数据库/模型中删除对象时,如何让 Django Admin 删除文件?

如何在 Django 管理员中删除特定模型的添加按钮?

如何从Django模型中的数据库表名中删除后缀's',这是由Djanog自动添加的