enabling/disabling 全站点管理功能的最佳实践/最佳位置是什么
What is the best practice / best place for enabling/disabling site-wide admin functionality
情况:我有一个包含多个应用程序的 Django 项目,每个应用程序都有一个或多个模型。我为某些模型添加了自定义 admin actions,并免费获得了“删除所选”操作。我想为所有应用程序中的所有模型禁用此功能。
我知道如何disable the "Delete selected"对整个项目采取行动,即使用
admin.site.disable_action('delete_selected')
但我就是不知道该把它放在哪里。我已经把它放在一个应用程序的 admin.py
文件中,这确实有效,但这让我很烦恼(在我看来)一个站点范围的更改,也会影响其他应用程序,不应该由管理员引起单个应用程序的配置。我希望找到一些方法来拥有一个“项目级”admin.py
文件,但似乎只有 fully customizing the AdminSite 可以解决问题,如果我只想禁用,我认为这有点矫枉过正全局“delete_selected”操作。
有什么想法吗?
这在某种程度上取决于您,但是在您已经导入必要模块的地方这样做是有意义的。
您可能会在您的项目中这样做 urls.py
,并以我的一个为例;
from django.contrib import admin
from django.urls import re_path, path, include
from django.views.decorators.cache import cache_page
from django.views.i18n import JavaScriptCatalog
try:
admin.site.disable_action('delete_selected')
except KeyError:
pass
urlpatterns = [
path(
'jsi18n/',
cache_page(60 * 60, cache='pages')(
JavaScriptCatalog.as_view()
),
name='javascript-catalog'
),
path(
'admin/',
admin.site.urls
)
]
我把它包裹在 try/except
中,因为我在测试时看到 KeyError
。
情况:我有一个包含多个应用程序的 Django 项目,每个应用程序都有一个或多个模型。我为某些模型添加了自定义 admin actions,并免费获得了“删除所选”操作。我想为所有应用程序中的所有模型禁用此功能。
我知道如何disable the "Delete selected"对整个项目采取行动,即使用
admin.site.disable_action('delete_selected')
但我就是不知道该把它放在哪里。我已经把它放在一个应用程序的 admin.py
文件中,这确实有效,但这让我很烦恼(在我看来)一个站点范围的更改,也会影响其他应用程序,不应该由管理员引起单个应用程序的配置。我希望找到一些方法来拥有一个“项目级”admin.py
文件,但似乎只有 fully customizing the AdminSite 可以解决问题,如果我只想禁用,我认为这有点矫枉过正全局“delete_selected”操作。
有什么想法吗?
这在某种程度上取决于您,但是在您已经导入必要模块的地方这样做是有意义的。
您可能会在您的项目中这样做 urls.py
,并以我的一个为例;
from django.contrib import admin
from django.urls import re_path, path, include
from django.views.decorators.cache import cache_page
from django.views.i18n import JavaScriptCatalog
try:
admin.site.disable_action('delete_selected')
except KeyError:
pass
urlpatterns = [
path(
'jsi18n/',
cache_page(60 * 60, cache='pages')(
JavaScriptCatalog.as_view()
),
name='javascript-catalog'
),
path(
'admin/',
admin.site.urls
)
]
我把它包裹在 try/except
中,因为我在测试时看到 KeyError
。