我试图用我自己的自定义类覆盖AdminSite类.我按照django的文档中的教程:https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#customizing-adminsite但它没有用.具体来说,我想用我自己的类覆盖原始的AdminSite,而不只是在我的项目中添加另一个管理站点.
我创建了从类继承的自定义类MyAdminSite
from django.contrib.admin import AdminSite
class MyAdminSite(AdminSite):
pass
Run Code Online (Sandbox Code Playgroud)
然后在我的app urls.py中添加:
from django.conf.urls import url, include
import django.contrib.admin as admin
from .admin_site import MyAdminSite
admin.site = MyAdminSite()
admin.autodiscover()
urlpatterns = [
url(r'^', admin.site.urls),
]
Run Code Online (Sandbox Code Playgroud)
它似乎工作,但管理员模型注册到AdminAdite的MyAdminSite.
我尝试了三种注册模型到我的自定义网站:
@admin.register(Model)
class ModelAdmin(model.AdminModel):
...
Run Code Online (Sandbox Code Playgroud)
这种方式模型已注册到原始AdminSite.
第二种方式:
@admin.site.register(Model):
class ModelAdmin(model.AdminModel):
...
Run Code Online (Sandbox Code Playgroud)
这不起作用并导致异常.ModelAdmin类未传递给register方法.
最后一种方式
class ModelAdmin(model.AdminModel):
...
admin.site.register(Model, ModelAdmin)
Run Code Online (Sandbox Code Playgroud)
这是有效的,但在管理员网站上我只能看到我的模型不是来自Django管理员(用户和组)的模型.
如何永久覆盖admin.site并将所有模型注册到MyAdminSite?