Python Django自定义管理站点不';无法在模型视图中工作
我实现了一个带有自定义标题的自定义管理站点,当查看“主页”和“应用”视图时,一切都进行得很顺利。但是,当我检查“Model”实例时,头返回到默认值 我该如何解决这个问题?我做了什么错事还是认为这是Django的错误? 问题演示 应用程序视图: 模型视图: MCVE 创建新项目和应用程序,并在应用程序中的文件Python Django自定义管理站点不';无法在模型视图中工作,python,django,django-admin,Python,Django,Django Admin,我实现了一个带有自定义标题的自定义管理站点,当查看“主页”和“应用”视图时,一切都进行得很顺利。但是,当我检查“Model”实例时,头返回到默认值 我该如何解决这个问题?我做了什么错事还是认为这是Django的错误? 问题演示 应用程序视图: 模型视图: MCVE 创建新项目和应用程序,并在应用程序中的文件sites.py中: from django.contrib import admin class CustomSite(admin.AdminSite): site_head
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配置中URL.py
:
from django.contrib import admin
from django.urls import path
from adminfail.sites import custom_site
urlpatterns = [
path('custom_admin/', custom_site.urls),
]
另外,将该应用程序添加到settings.py
中的已安装的应用程序中
然后,如果您从命令行创建一个超级用户并运行该应用程序,您将看到在检查模型实例时,自定义标题会返回到默认值。好的,所以我终于知道我做错了什么。我正在从默认的管理站点复制注册表,但是注册表是模型及其ModelAdmin
实例之间的映射,ModelAdmin
实例有一个属性admin\u site
,它告诉Django这是在哪个AdminSite
下注册的。因此,为了解决这个问题,我简单地复制了ModelAdmin
,并将admin\u site
属性设置为myCustomSite
。如果你改变了其他东西,最好是deepcopy
it,这是一个相对未经测试的技巧/黑客,可能会有其他后果,但现在一切都进展得非常顺利
以下是CustomSite
中的代码:
from copy import copy
from django.apps import apps
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)
for model,model_admin in admin.site._registry.items():
new_model_admin = copy(model_admin)
new_model_admin.admin_site = self
self._registry[model] = new_model_admin
custom_site = CustomSite('custom_admin')
好吧,我终于明白我做错了什么。我正在从默认的管理站点复制注册表,但是注册表是模型及其ModelAdmin
实例之间的映射,ModelAdmin
实例有一个属性admin\u site
,它告诉Django这是在哪个AdminSite
下注册的。因此,为了解决这个问题,我简单地复制了ModelAdmin
,并将admin\u site
属性设置为myCustomSite
。如果你改变了其他东西,最好是deepcopy
it,这是一个相对未经测试的技巧/黑客,可能会有其他后果,但现在一切都进展得非常顺利
以下是CustomSite
中的代码:
from copy import copy
from django.apps import apps
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)
for model,model_admin in admin.site._registry.items():
new_model_admin = copy(model_admin)
new_model_admin.admin_site = self
self._registry[model] = new_model_admin
custom_site = CustomSite('custom_admin')