Добавлена обработка ValidationError в AJAX API и Bootstrap alert на странице списка заказов
Проблема:
На странице списка заказов (order_list) при изменении статуса 'на лету':
- ValidationError показывался через alert() - страшно
- Сообщение содержало служебные элементы
- Статус всё равно менялся визуально (нет отката)
Решение Backend (views.py):
- В set_order_status добавлена обработка ValidationError ПЕРЕД ValueError
- Извлекается чистое сообщение (e.messages[0] или str(e))
- Возвращается JSON: {success: false, error: 'чистое сообщение'}
Решение Frontend (order_list.html):
- Добавлен контейнер для динамических Bootstrap alert
- Создана функция showAlert() для показа красивых alert-danger
- При ошибке:
* Показывается Bootstrap alert с иконкой
* Прокрутка к верху страницы
* Автоскрытие через 5 секунд
* Возврат select к предыдущему значению (откат визуально)
- Больше НЕТ страшных alert()
Теперь пользователь видит:
[красный Bootstrap alert вверху страницы]
⚠️ Заказ 134 был отменён, товары проданы в другом заказе.
Невозможно изменить статус. Для новой продажи создайте новый заказ.
[X]
User-friendly на обеих страницах (форма редактирования + список)!
This commit is contained in:
@@ -684,6 +684,14 @@ def set_order_status(request, order_number):
|
||||
'color': status.color
|
||||
}
|
||||
})
|
||||
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)
|
||||
return JsonResponse({'success': False, 'error': error_message}, status=400)
|
||||
except ValueError as e:
|
||||
# Ошибка в сигналах (например, не удалось создать Sale)
|
||||
# Транзакция откатилась, статус НЕ изменился
|
||||
|
||||
Reference in New Issue
Block a user