Удаление действия по умолчанию "Удалить" в админке Django
Проблема: Как удалить действие удаления по умолчанию в админке Django?
Я пытаюсь убрать действие удаления по умолчанию из админки Django. В документации указано, что можно задать свои действия, но я не совсем уверен, как это сделать правильно.
Я думаю, что если установить actions
как пустой список, это решит проблему. Будет ли это работать?
actions = []
Если нет, то подскажите, пожалуйста, как правильно удалить действие удаления из админ-панели. Спасибо!
3 ответ(ов)
Если вы хотите удалить все действия:
class UserAdmin(admin.ModelAdmin):
model = User
actions = None
Если вы хотите оставить какое-то конкретное действие:
class UserAdmin(admin.ModelAdmin):
model = User
actions = ['name_of_action_you_want_to_keep']
Таким образом, вы можете контролировать, какие действия будут доступны в админкой для вашей модели.
В ответ на ваш вопрос, хочу поблагодарить пользователей @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
Данный код убирает действие удаления из списка действий и отключает возможность удаления из детального представления. Таким образом, можно ограничить пользователей от выполнения операции удаления. Если у вас есть дополнительные вопросы или нужны пояснения, не стесняйтесь спрашивать!
Если вы используете определенную модель в качестве внешнего ключа в другой модели, вы можете использовать ограничение 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
, так и в других местах.
В чем разница между null=True и blank=True в Django?
'pip' не распознан как командa внутреннего или внешнего формата
Как выполнить поиск в стиле getattr() в шаблоне Django
PIL / JPEG библиотека: "декодировщик JPEG недоступен"
"_set" в объекте queryset в Django