У меня есть обработчик сигнала pre_save
на кучу моделей, которые пишут в другую базу данных. Если что-то пойдет не так, я хотел бы прекратить все сохранение или не дать сообщение пользователю.Исключить ошибку при сохранении admin в Django?
на основе Display custom message from signal in the admin, я написал подмешать с методами, как:
class SafeSaveMixin(object):
def save_model(self, request, *args, **kwargs):
try:
return super(SafeSaveMixin, self).save_model(request, *args, **kwargs)
except Exception as e:
self.message_user(request, e, messages.ERROR)
Это позволяет мне выбросить исключение из pre_save
обработчика и показать пользователю сообщение. Проблема в том, что, хотя это приводит к пропуску фактического Model.save()
, консоль администратора ничего не видит, поэтому она все равно сообщает об успешном сохранении объекта.
Если я изменил pre_save
обработчик к post_save
обработчику, который позволил бы основанию Model.save()
произойти и по крайней мере Джанго бы сообщить правильное положение вещей, но информация мне нужно в другой базе данных на основе предыдущий Состояние объекта, поэтому мне нужно добраться до него до сохранения.
Я также рассмотрела начинку сообщения об ошибке в самом объект в pre_save
и потянув ее в Mixin-х save_model()
- но это становится все более сложным в других ModelAdmin
сохранить методы, как save_formset()
.
Есть ли хороший способ сделать это?
Попробуйте это - https://stackoverflow.com/questions/2177720/показ-таможенно-модель-проверка-исключения-в-Джанго-админ-сайт/39512190 # 39512190 – spinkus