0

Удаление действия по умолчанию "Удалить" в админке Django

11

Проблема: Как удалить действие удаления по умолчанию в админке Django?

Я пытаюсь убрать действие удаления по умолчанию из админки Django. В документации указано, что можно задать свои действия, но я не совсем уверен, как это сделать правильно.

Я думаю, что если установить actions как пустой список, это решит проблему. Будет ли это работать?

actions = []

Если нет, то подскажите, пожалуйста, как правильно удалить действие удаления из админ-панели. Спасибо!

3 ответ(ов)

0

Если вы хотите удалить все действия:

class UserAdmin(admin.ModelAdmin):
    model = User
    actions = None

Если вы хотите оставить какое-то конкретное действие:

class UserAdmin(admin.ModelAdmin):
    model = User
    actions = ['name_of_action_you_want_to_keep']

Таким образом, вы можете контролировать, какие действия будут доступны в админкой для вашей модели.

0

В ответ на ваш вопрос, хочу поблагодарить пользователей @DawnTCherian, @tschale и @falsetru за их вклад. Я использовал следующий код:

class YourModelAdmin(admin.ModelAdmin):
    ...
    def get_actions(self, request):
        actions = super(YourModelAdmin, self).get_actions(request)
        try:
            del actions['delete_selected']
        except KeyError:
            pass
        return actions

    def has_delete_permission(self, request, obj=None):
        return False

Данный код убирает действие удаления из списка действий и отключает возможность удаления из детального представления. Таким образом, можно ограничить пользователей от выполнения операции удаления. Если у вас есть дополнительные вопросы или нужны пояснения, не стесняйтесь спрашивать!

0

Если вы используете определенную модель в качестве внешнего ключа в другой модели, вы можете использовать ограничение PROTECT для этого внешнего ключа, чтобы отключить возможность удаления связанной модели в Django admin.

Например:

class Exam(models.Model):
    student = models.ForeignKey(User, on_delete=models.PROTECT)
    marks = models.IntegerField(default=0)

Добавив ограничение PROTECT к модели User через внешний ключ в модели Exam, вы тем самым отключаете возможность удаления пользователей (User), которые написали экзамены, как в Django admin, так и в других местах.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь