feat: add detailed logging for request creation errors

Backend (API):
- Added logging of user ID and request data keys before validation
- Log validation errors with full details before raising exception
- Helps diagnose 400 Bad Request errors from users

Frontend (JS):
- Added console logging of all FormData entries before submit
- Improved error message display with field-specific validation errors
- Shows structured error messages instead of generic 'HTTP 400'

This will help identify why some users get 400 errors when creating requests.
This commit is contained in:
admin i 2025-12-08 12:29:44 +03:00
parent ff9b094dd7
commit da62d93c57
2 changed files with 52 additions and 4 deletions

View File

@ -387,11 +387,38 @@ class RequestViewSet(viewsets.ModelViewSet):
)
def create(self, request, *args, **kwargs):
"""Создание заявки: валидируем write-сериализатором, отвечаем read-сериализатором."""
"""
Создание заявки: валидируем write-сериализатором,
отвечаем read-сериализатором.
"""
import logging
logger = logging.getLogger(__name__)
logger.info(
f"[RequestViewSet.create] User: {request.user.id}, "
f"Data keys: {list(request.data.keys())}"
)
serializer = self.get_serializer(data=request.data)
if not serializer.is_valid():
logger.error(
f"[RequestViewSet.create] Validation errors: "
f"{serializer.errors}"
)
logger.error(
f"[RequestViewSet.create] Request data: {request.data}"
)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
instance = serializer.instance
read = RequestReadSerializer(instance, context=self.get_serializer_context())
read = RequestReadSerializer(
instance,
context=self.get_serializer_context()
)
headers = self.get_success_headers(read.data)
return Response(read.data, status=status.HTTP_201_CREATED, headers=headers)
return Response(
read.data,
status=status.HTTP_201_CREATED,
headers=headers
)

View File

@ -122,6 +122,13 @@ export function initRequestCrudHandler(options) {
try {
const url = saveAs === 'draft' ? `${apiListUrl}?save_as=draft` : apiListUrl;
// Логируем данные для отладки
console.log('[requestCrudHandler] Creating request with data:');
for (const [key, value] of formData.entries()) {
console.log(` ${key}:`, value);
}
const response = await fetch(url, {
method: 'POST',
headers: headers,
@ -130,7 +137,21 @@ export function initRequestCrudHandler(options) {
if (!response.ok) {
const error = await response.json();
throw new Error(error.detail || 'HTTP ' + response.status);
console.error('[requestCrudHandler] Validation error:', error);
// Показываем детали ошибки
let errorMessage = 'Не удалось создать заявление:\n';
if (error.detail) {
errorMessage += error.detail;
} else if (typeof error === 'object') {
// Форматируем ошибки валидации
for (const [field, messages] of Object.entries(error)) {
const fieldMessages = Array.isArray(messages) ? messages.join(', ') : messages;
errorMessage += `\n${field}: ${fieldMessages}`;
}
}
throw new Error(errorMessage);
}
await response.json();