【问题标题】:Django model under other app label in admin?管理员中其他应用标签下的Django模型?
【发布时间】:2015-06-18 20:48:41
【问题描述】:

寻找一种将 ModelAdmin 实例分配给与默认应用程序标签不同的方法,即使在最新的 Django 1.8 中也是如此。

Django 项目架构:

<root>/appone/models.py    # class ModelOne(django.db.models.Model)
<root>/appone/admin.py     # class ModelOneAdmin(
                           #     django.contrib.admin.ModelAdmin)
                           # admin.site.register(
                           #     ModelOne, ModelOneAdmin)

<root>/apptwo/models.py    # class ModelTwo(django.db.models.Model)
<root>/apptwo/admin.py     # class ModelTwoAdmin(
                           #     django.contrib.admin.ModelAdmin)
                           # admin.site.register(
                           #     ModelTwo, ModelTwoAdmin)

在上面的示例中,每个模型都出现在 管理界面 中,在其由应用程序名称标记的单独组中。

  --- appone
        |
        +--- ModelOne

  --- apptwo
        |
        +--- ModelTwo

如何告诉 Django ModelTwo 位于 appone 标签下? (不更改appone 应用程序源及其模型!)

  --- appone
        |
        +--- ModelOne
        |
        +--- ModelTwo

  --- apptwo
        <empty>

【问题讨论】:

标签: python django django-models django-admin monkeypatching


【解决方案1】:

只需将app_label 添加到MetaModelTwo 类:

class ModelTwo():
    class Meta:
        app_label = 'appone'

警告:正如@guymaro86 所述,这将更改表的数据库名称并导致迁移。

【讨论】:

  • 这实际上不起作用,因为它有副作用。即它还会更改表的数据库名称并导致迁移。
【解决方案2】:

你考虑过django-modeladmin-reorder

Github:https://github.com/mishbahr/django-modeladmin-reorder 派皮:https://pypi.python.org/pypi/django-modeladmin-reorder/

免责声明:去年我遇到了非常相似的问题,我想将最常用的应用程序放在管理索引的顶部。找不到任何适合我的场景,所以我自己写了:-)

【讨论】:

  • 感谢您的提示,我一定会看看的。只是好奇在我深入研究资源之前使用了什么技术。拦截 AdminSite 视图并从头开始重新组织小部件和表单的中间件?不能以更简单的方式完成,例如我原来的问题?
  • 我正在使用中间件来覆盖上下文。可以只使用app_label 元向appone 添加新模型。我没试过。让我知道这是否有效。 docs.djangoproject.com/en/1.8/ref/models/options/#app-label
猜你喜欢
  • 2011-04-16
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2010-12-05
  • 2014-05-21
  • 2011-01-26
  • 2013-06-18
  • 1970-01-01
相关资源
最近更新 更多