Добавлена обработка ValidationError с выводом через Django messages
Проблема: ValidationError из сигналов отображался как: 'Server error: [\'Заказ 134 был отменён...\']' со служебными элементами (Server error, квадратные скобки). Решение: В order_update добавлена обработка ValidationError перед ValueError: - Извлекаем чистое сообщение из исключения (e.messages[0] или str(e)) - Показываем через messages.error() — Django автоматически отобразит красивым Bootstrap alert-danger - Транзакция откатывается, изменения не сохраняются Теперь пользователь видит: [красный Bootstrap alert] 'Заказ 134 был отменён, товары проданы в другом заказе. Невозможно изменить статус. Для новой продажи создайте новый заказ.' Без технических префиксов и форматирования - user-friendly.
This commit is contained in:
@@ -246,6 +246,15 @@ def order_update(request, order_number):
|
|||||||
|
|
||||||
messages.success(request, f'Заказ #{order.order_number} успешно обновлен!')
|
messages.success(request, f'Заказ #{order.order_number} успешно обновлен!')
|
||||||
return redirect('orders:order-detail', order_number=order.order_number)
|
return redirect('orders:order-detail', order_number=order.order_number)
|
||||||
|
except ValidationError as e:
|
||||||
|
# Ошибка валидации (например, запрет смены статуса для возвращённого заказа)
|
||||||
|
# Транзакция откатилась, заказ НЕ изменился
|
||||||
|
# Показываем сообщение из исключения без служебных элементов
|
||||||
|
error_message = str(e.message) if hasattr(e, 'message') else str(e)
|
||||||
|
# Если это список ошибок, берём первую
|
||||||
|
if hasattr(e, 'messages'):
|
||||||
|
error_message = e.messages[0] if e.messages else str(e)
|
||||||
|
messages.error(request, error_message)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
# Ошибка в сигналах (например, не удалось создать Sale)
|
# Ошибка в сигналах (например, не удалось создать Sale)
|
||||||
# Транзакция откатилась, статус НЕ изменился
|
# Транзакция откатилась, статус НЕ изменился
|
||||||
|
|||||||
Reference in New Issue
Block a user