我有单个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),
]
上实现此目标
我不想添加其他应用 - 只想使用单个应用并自定义 管理员。
我尝试在apps.py中添加另一个AppConfig,但它没有帮助。
答案 0 :(得分:0)
您需要customize the AdminSite
class。作为起点,请看:
app_list
dict的方法,用于显示此项。 django.contrib.admin.sites.AdminSite#get_app_list 我会将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'},
)},