代码之家  ›  专栏  ›  技术社区  ›  golkedj

通过django admin删除对象时,是否可以禁用相关对象的生成?

  •  1
  • golkedj  · 技术社区  · 6 年前

    我目前正在维护一个遗留系统,而一个新系统正在开发中。我最近注意到,当我试图从特定模型中删除某些对象时,会超时。我已经追踪到与以下问题相关的问题,这些问题有一个公认的答案: Django admin hangs (until timeout error) for a specific model when trying to edit/create

    我遇到的问题是,相关的对象与我的模型没有直接的关系。

    例如,我有以下模型(通常命名为由于我公司的IP而保持模糊):

    • ModelA 从django管理网站删除时,我看到的问题是哪种模式?
    • ModelB 其中包含一个foreignkey字段 模特儿
    • ModelC 其中包含一个foreignkey字段 模型B
    • ModelD 其中包含一个foreignkey字段 C型
    • ModelE 其中包含一个foreignkey字段 模特儿

    模型详细信息:

    • 模特儿 可以包含数十个/数百个/数千个条目
    • 模特儿 . 另外 模特儿 可以包含数十个/数百个/数千个条目 模型B

    当前尝试删除时 模特儿 Django尝试生成所有关联的对象,一直到 模型E 在某些情况下,它会导致超时,并且关联的数量很多 模特儿 模特儿 .

    是否有一种方法可以通过覆盖自定义模板(如删除确认模板)或任何其他方法来避免这种情况?理想情况下,我仍然想显示摘要,但我不确定这是否可能与此问题的性质。

    上下文的一些细节:

    • 我觉得这可能是由于我们的数据库模式中的整体结构不好,但正如我之前提到的,这是一个遗留系统。
    • 我不需要立即解决这个问题,因为我实际上永远不会删除这个模型的条目,除了我当前清理重复条目的场景/任务(用户错误没有被表单正确控制;表单现在检查这个),这是通过迁移脚本完成的。我只是在尝试清理东西时注意到了这一点,并在测试所说的迁移脚本时利用这个中间页作为健全性检查。

    Timeout screenshot

    1 回复  |  直到 6 年前
        1
  •  0
  •   golkedj    6 年前

    通过对评论的讨论,我得出了以下结论:

    • on_delete 被设置为 CASCADE for模型不正确,在尝试删除模型时导致检索相关对象的时间非常长
    • 因为我不想在其他特定模型与这些对象有关联时删除这些对象,所以我分析并适当地设置了 Onl删除 PROTECT 如适用
    • 现在,当我尝试删除一个对象时,由于受保护的相关项,它将不允许我删除该对象。它还解决了我以前观察到的超时问题。

    如果没有相关的受保护对象,这允许我仍然通过django管理站点从该模型中删除对象,这最终是我想要的功能。