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

如何将ModelAdmins从一个应用程序拆分到多个块

  •  2
  • user1636765  · 技术社区  · 7 年前

    我有一个Django应用程序,它包含2个模型商店和帐户。

    现在,我想将其分为两个部分,以改善用户界面:

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

    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

    • 我不想添加其他应用程序-只想使用单个应用程序并进行自定义 管理

    3 回复  |  直到 7 年前
        1
  •  2
  •   Paco H.    7 年前

    你需要 customize the AdminSite class


    app_label 变量输入 django.contrib.admin.sites.AdminSite#_build_app_dict 例如:

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

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

    这将有一些副作用,你将不得不做更多的改变,以使你的自定义管理网站这项工作,但我认为这应该给你必要的信息开始。

        2
  •  1
  •   Liad Yogev midzay    5 年前

    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'},
    )},
    
        3
  •  0
  •   Dos    7 年前

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

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