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:
parent
2543ce54c4
commit
5d2d0841c8
@ -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
|
||||
)
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user