【问题标题】:Is it a bad idea to change the app_label assignment on existing Django models?更改现有 Django 模型上的 app_label 分配是一个坏主意吗?
【发布时间】:2011-01-21 04:33:49
【问题描述】:

我有一个简单的想法,即将不同现有应用程序中的模型分组到一个新的大型应用程序中。我需要这样做并不是一个非常重要的原因,但是将所有代码合并到一个子目录中会很好,它会改进站点以将所有模型组合在同一模块标题下的 admin_index 中。

我的第一个想法是将现有表名硬编码到 Meta 中所有模型的 db_table 设置中,然后为每个模型赋予相同的 app_label 设置。

但我担心这可能会搞砸所有内容的 ContentType 和 auth Permission 设置。有没有人试过这个?我用谷歌搜索了一下,没有看到任何直接解决问题的方法,尽管似乎有些人想出了一些巧妙的方法来使用一些自定义配置设置重新组织 admin_index。

【问题讨论】:

    标签: python django templates models admin


    【解决方案1】:

    您说得对,移动模型会使现有的 ContentType 条目变得无用。如果不了解您的项目的具体情况,很难说什么是“好主意”。您可能只是尝试分支您的代码,进行更改,并更新内容类型和权限表以反映。或者,您可以使用 South 编写数据迁移,尽管根据迁移的创建或运行时间与移动模型的时间来找到使其工作的平衡可能会很棘手。如果您能够运行主干,您还可以查看自然键:http://docs.djangoproject.com/en/dev/topics/serialization/#natural-keys。这可能会导致以更通用的方式将数据导出到固定装置中的更简单路径,以便在进行更改后可以轻松加载它们。

    如果您打算使用 Django 一段时间和/或从事大型项目,您将希望开始培养处理这些类型更改的技能。不断发展的代码和重构是生活中的事实。了解在随意的环境中进行这些更改的陷阱将使您更好地应对在团队环境和大型项目中确实发生的各种问题。

    【讨论】:

    • 谢谢你的建议,布赖恩。我尝试通过硬编码db_table 并添加新的app_label 来调整其中一个模型。使用新的 app_label 创建了一个新的 ContentType 对象,这听起来不错。但是似乎没有创建相应的权限,当我在新的 ContentType 上运行 ct.permission_set.all() 时,我得到一个空列表。尝试运行这些人以更新权限,但运气不佳。 djangosnippets.org/snippets/696
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 2015-02-24
    • 2012-04-02
    相关资源
    最近更新 更多