Добавлена обработка 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:
2025-12-12 00:08:53 +03:00
parent 449b693ab5
commit 49cfec3088

View File

@@ -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)
# Транзакция откатилась, статус НЕ изменился # Транзакция откатилась, статус НЕ изменился