Django自定义管理站点在“模型”视图中不起作用

时间:2019-05-18 21:41:44

标签: python django django-admin

我实现了一个带有自定义标题的自定义管理站点,并且在查看“主页”和“应用”视图时,一切都进行得很好。但是,当我检查“模型”实例时,标题将恢复为默认值。

该如何解决?我做错了什么,还是认为这是Django中的错误是合理的?

问题演示

应用程序视图: good header

模型视图: bad header

MCVE

(为使您的生活更轻松,我将MCVE上传到了GitHub,但相关代码如下:https://github.com/gregschmit/customadminfail

制作一个新项目和应用程序,并在该应用程序的文件sites.py中:

from django.contrib import admin


class CustomSite(admin.AdminSite):
    site_header = 'Custom Header'
    site_title = 'Custom Title'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._registry.update(admin.site._registry)


custom_site = CustomSite('custom_admin')

然后,在您的项目URL配置urls.py中:

from django.contrib import admin
from django.urls import path

from adminfail.sites import custom_site

urlpatterns = [
    path('custom_admin/', custom_site.urls),
]

另外,将应用程序添加到INSTALLED_APPS中的settings.py中。

然后,如果从命令行创建超级用户并运行应用程序,则在检查Model实例时,您将看到自定义标头恢复为默认值。

1 个答案:

答案 0 :(得分:0)

好的,所以我终于弄清楚我做错了什么。我正在从默认管理站点复制注册表,但是注册表是模型及其ModelAdmin实例之间的映射,并且ModelAdmin实例具有属性admin_site,该属性告诉Django哪个{{1 }}是在下面注册的。因此,为解决此问题,我简单地复制了AdminSite并将ModelAdmin属性设置为我的admin_site。如果您更改其他内容,最好CustomSite使用,这是一种未经测试的技巧/黑客,可能会带来其他后果,但是现在一切工作都非常好。

这是deepcopy中的代码:

CustomSite