Мне удалось отключить действие "Удалить выбранное". Легко.
Но пользователь все равно может щелкнуть по элементу, а затем внизу появится красная ссылка Удалить.
Мне удалось отключить действие "Удалить выбранное". Легко.
Но пользователь все равно может щелкнуть по элементу, а затем внизу появится красная ссылка Удалить.
Простой:)
class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
# Other stuff here
def has_delete_permission(self, request, obj=None):
return False
Если вы хотите отключить конкретный, который не является обычным, сделайте это. В django 1.6.6 мне пришлось растянуть get_actions
плюс define has_delete_permission
. Решение has_delete_permission
не избавляет от действия из раскрывающегося списка для меня:
class MyModelAdmin(admin.ModelAdmin):
....
def get_actions(self, request):
#Disable delete
actions = super(MyModelAdmin, self).get_actions(request)
del actions['delete_selected']
return actions
def has_delete_permission(self, request, obj=None):
#Disable delete
return False
Не включая его в actions = ['your_custom_action']
, работает только для пользовательских действий (defs), определенных для этой модели. Решение AdminSite.disable_action('delete_selected')
отключает его для всех моделей, поэтому вам придется явно включать их позже для каждой моделиAdmin
Просто отключите разрешение yourapp.delete_yourmodel
для этого пользователя или группы, к которой он принадлежит.
Ну, вы, вероятно, используете:
AdminSite.disable_action('delete_selected')
Для дальнейшего управления просто выполните свой собственный администратор и установите его действия на все, что вам нужно:
class MyModelAdmin(admin.ModelAdmin):
actions = ['whatever', 'actions']
Ссылка: http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-a-site-wide-action
admin.site.disable_action('delete_selected')
Из docs
Это очень старо, но, тем не менее, это может кому-то помочь.
Предполагая, что ОП
... пользователь все еще может щелкнуть по элементу, а затем внизу появится красная ссылка Удалить.
ссылается на красную кнопку в представлении "изменить". Эту кнопку можно удалить, расширив метод ModelAdmin.change_view
следующим образом:
def change_view(self, request, object_id=None, form_url='', extra_context=None):
return super().change_view(request, object_id, form_url,
extra_context=dict(show_delete=False))
Вы можете сделать то же самое с show_save
и show_save_and_continue
. Больше информации и альтернатив здесь.
Также обратите внимание, что в Django 2.1 теперь есть отдельный has_view_permission
(docs), который может быть лучшим вариантом, в зависимости от вашего варианта использования.