【问题标题】:How to split ModelAdmins from one app to more block如何将 ModelAdmins 从一个应用程序拆分到多个块
【发布时间】:2018-03-02 12:33:47
【问题描述】:

我有一个 Django 应用程序,它包含 2 个模型商店和帐户。 我在 admin.py 中注册了它们,然后在一个“示例应用程序”块中将它们放入管理员中

现在我想把它分成两个块来更好的 UI:

“示例应用”将仅包含帐户

“具有自定义名称的另一个块”将具有商店模型。

this looks like the current state

# admin.py

class FooAdminSite(AdminSite):
    site_title = "Foo Admin"
    site_header = 'Foo administration'


class AccountAdmin(admin.ModelAdmin):
    pass


class StoreAdmin(admin.ModelAdmin):
    pass


admin_site = FooAdminSite(name='admin')
admin_site.register(Account, AccountAdmin)
admin_site.register(Store, StoreAdmin)

# urls.py

from foo.admin import admin_site

urlpatterns = [
    url(r'^admin/', admin_site.urls),
]

我如何在this screenshot 上实现这一点

  • 我不想添加另一个应用程序 - 只想使用单个应用程序并自定义 管理员。

  • 我尝试在 apps.py 中添加另一个 AppConfig,但没有帮助。

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    它可以帮助你:django-modeladmin github's repository

    # Keep original label and models
    'sites',
    
    # Rename app
    {'app': 'auth', 'label': 'Authorisation'},
    
    # Reorder app models
    {'app': 'auth', 'models': ('auth.User', 'auth.Group')},
    
    # Exclude models
    {'app': 'auth', 'models': ('auth.User', )},
    
    # Cross-linked models
    {'app': 'auth', 'models': ('auth.User', 'sites.Site')},
    
    # models with custom name
    {'app': 'auth', 'models': (
        'auth.Group',
        {'model': 'auth.User', 'label': 'Staff'},
    )},
    

    【讨论】:

      【解决方案2】:

      Django官方文档建议Customize the admin index page

      [...] 您可能想要自定义 Django 管理索引页面的外观。 默认情况下,它会按字母顺序显示 INSTALLED_APPS 中已向管理应用程序注册的所有应用程序。您可能希望对布局进行重大更改。毕竟 index 可能是 admin 最重要的页面,应该很容易使用。 要自定义的模板是 admin/index.html。 (与上一节中的 admin/base_site.html 执行相同操作 - 将其从默认目录复制到您的自定义模板目录)。编辑该文件,您会看到它使用了一个名为 app_list 的模板变量。该变量包含每个已安装的 Django 应用程序。您可以使用任何您认为最好的方式硬编码指向特定于对象的管理页面的链接,而不是使用它。

      【讨论】:

        【解决方案3】:

        您需要customize the AdminSite class。作为起点,请看:


        我会将django.contrib.admin.sites.AdminSite#_build_app_dict 中的app_label 变量更改为:

        app_label = getattr(model_admin, 'category', None) or model._meta.app_label
        

        然后在你的管理模型中你可以这样做:

        class StoreAdmin(admin.ModelAdmin):
            category = 'ANOTHER BLOCK WITH CUSTOM NAME'
        

        这会产生一些副作用,您必须对自定义管理站点进行更多更改才能使其正常工作,但我认为这应该为您提供必要的信息以开始。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-19
          • 2012-02-03
          • 2017-01-02
          • 2011-09-04
          • 1970-01-01
          • 2014-05-08
          相关资源
          最近更新 更多