0

情况:我有一个包含多个应用程序的 Django 项目,每个应用程序都有一个或多个模型。我为某些模型添加了自定义管理操作,并免费获得了“删除选定”操作。我想为所有应用程序中的所有模型禁用此功能。

我知道如何禁用整个项目的“删除选定”操作,即使用

admin.site.disable_action('delete_selected')

但我根本不知道把它放在哪里。我已经把它放在admin.py一个应用程序的文件中,这绝对有效,但是(在我看来)站点范围的更改,也影响其他应用程序,不应该是由单个应用程序的管理配置引起的. 我希望找到某种方法来拥有“项目级”admin.py文件,但似乎只有完全自定义 AdminSite才能解决问题,如果我只想全局禁用“delete_selected”操作,我认为这有点矫枉过正.

有什么想法吗?

4

1 回答 1

0

这在某种程度上取决于您,但是在您已经导入必要的模块的地方这样做是有意义的。

很可能你可以在你的项目中做到这一点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
    )
]

我把它包装在 a 中是try/except因为我KeyError在测试时看到了 a 。

于 2020-09-15T15:53:44.350 回答