【问题标题】:Deleting unused Models, stale content types prompt删除未使用的模型,过时的内容类型提示
【发布时间】:2015-08-12 22:31:54
【问题描述】:

我正在从我们的 Django 网站中删除一个不必要的表和模型。在调用 migrations.DeleteModel(...) 之前,我已经删除了所有外键引用,但是当我运行迁移时,我仍然收到以下提示:

以下内容类型已过时,需要删除:

myapp | MyDeletedModel

通过外键与这些内容类型相关的任何对象也将 被删除。您确定要删除这些内容类型吗?如果 您不确定,请回答“否”。

Type 'yes' to continue, or 'no' to cancel: yes

我很困惑为什么我会收到此提示,有没有办法可以在我们上线时阻止此提示显示?我们使用 CI 环境,没有用户可以回答“是”或“否”

谢谢

【问题讨论】:

    标签: django django-migrations


    【解决方案1】:

    内容类型框架包含对模型表的引用。在这种情况下,您对刚刚删除的表有一个过时的引用。回答 yes 并删除陈旧的内容类型是完全安全的。如果你重命名一个有一个GenericForeignKey 指向它的表,那将是一个不同的故事,在这种情况下,其他对象将有一个ForeignKey 到那个ContentType,并且删除将沿着这些关系级联。

    在实时环境中,您可以通过--noinput 选项来抑制此提示。但是,它将默认为no。放置一些陈旧的contenttypes 通常不是问题。

    【讨论】:

    • 谢谢@knbk,我将与我们的 ci 人员核实一下我们如何为 --noinput 运行迁移,如果我们回答一次,它会记住答案,还是每次迁移都会提示我们?
    • 每次运行重命名或删除模型的迁移时都会提示您。
    • 好的,我正在查看 django_contenttype 表。当我回答“是”时,我不再看到桌子的一行。但是如果我回答no,它会提示下一次迁移,对吧?
    • 如果你使用--noinput选项,系统是相当保守的。对于内容类型,它总是回答no。
    • 在使用真实数据之前,我会先测试它的实际作用。这件事只是丢了一张对我们很重要的桌子。幸运的是,在测试数据库中。
    猜你喜欢
    • 2015-08-25
    • 2017-07-29
    • 2018-06-12
    • 2011-09-19
    • 2014-08-08
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2016-12-13
    相关资源
    最近更新 更多