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

时间:2017-09-21 08:35:25

标签: python django django-admin

我有单个Django应用程序,它包含2个模型Store和Account。 我在admin.py中注册了它们,我在一个块“示例应用程序”

中将它们放在管理员中

现在我想将它分成两个块来改善UI:

“示例APP”将仅包含帐户

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

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,但它没有帮助。

3 个答案:

答案 0 :(得分:0)

您需要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'

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

答案 1 :(得分:0)

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

  

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

答案 2 :(得分:0)

它可以帮助您: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'},
)},