相关疑难解决方法(0)

Django(1.10)覆盖AdminSite

我试图用我自己的自定义类覆盖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?

python django

9
推荐指数
2
解决办法
2550
查看次数

标签 统计

django ×1

python ×1