【发布时间】:2017-02-26 15:44:27
【问题描述】:
我尝试用我自己的自定义类覆盖 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
然后在我的应用程序 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),
]
它似乎有效,但管理模型已注册到 MyAdminSite 的 AdminSite。
我尝试了三种将模型注册到我的自定义站点的方法:
@admin.register(Model)
class ModelAdmin(model.AdminModel):
...
通过这种方式模型注册到原始 AdminSite。
第二种方式:
@admin.site.register(Model):
class ModelAdmin(model.AdminModel):
...
这不起作用并导致异常。 ModelAdmin 类未传递给 register 方法。
最后一种方式:
class ModelAdmin(model.AdminModel):
...
admin.site.register(Model, ModelAdmin)
这可行,但在管理站点上,我只能看到我的模型,而不是来自 Django 管理(用户和组)的模型。
如何永久覆盖 admin.site 并将所有模型注册到 MyAdminSite?
【问题讨论】:
-
如何将模型注册到自定义管理站点?
-
您链接到的文档中的哪些内容让您认为这可行?
-
文档站点只是一个例子,我知道还有一些我想要的东西。我也尝试了很多其他教程和其他方法,但没有一个有效。
-
Django 2.1 will have a hook 轻松覆盖默认管理站点。