Подтвердить что ты не робот

В Django Admin, как отключить ссылку Удалить

Мне удалось отключить действие "Удалить выбранное". Легко.

Но пользователь все равно может щелкнуть по элементу, а затем внизу появится красная ссылка Удалить.

4b9b3361

Ответ 1

Простой:)

class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
    # Other stuff here
    def has_delete_permission(self, request, obj=None):
        return False

Ответ 2

Если вы хотите отключить конкретный, который не является обычным, сделайте это. В 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

Ответ 3

Просто отключите разрешение yourapp.delete_yourmodel для этого пользователя или группы, к которой он принадлежит.

Ответ 4

Ну, вы, вероятно, используете:

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

Ответ 5

admin.site.disable_action('delete_selected')

Из docs

Ответ 6

Это очень старо, но, тем не менее, это может кому-то помочь.

Предполагая, что ОП

... пользователь все еще может щелкнуть по элементу, а затем внизу появится красная ссылка Удалить.

ссылается на красную кнопку в представлении "изменить". Эту кнопку можно удалить, расширив метод 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), который может быть лучшим вариантом, в зависимости от вашего варианта использования.