Add error handling for product creation to manage DataError exceptions

This commit is contained in:
2026-05-07 08:37:07 +02:00
parent 56286c2fd9
commit d6b7cdfe6a
+7 -1
View File
@@ -1,7 +1,7 @@
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.http import Http404, HttpRequest, HttpResponse, JsonResponse from django.http import Http404, HttpRequest, HttpResponse, JsonResponse
from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout from django.contrib.auth import authenticate, login as auth_login, logout as auth_logout
from django.db.utils import DataError
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib import messages from django.contrib import messages
from .models import User, Product, Category, Cart, CartItem, Image, Order, OrderItem, OrderMessage, ShippingAddress, StockReservation, StockReservationItem, VerificationCode, SavedPaymentMethod from .models import User, Product, Category, Cart, CartItem, Image, Order, OrderItem, OrderMessage, ShippingAddress, StockReservation, StockReservationItem, VerificationCode, SavedPaymentMethod
@@ -1011,6 +1011,7 @@ def crear_producto(request: HttpRequest):
categories = Category.objects.all() categories = Category.objects.all()
return render(request, "tienda/crear_producto.html", {"categories": categories}) return render(request, "tienda/crear_producto.html", {"categories": categories})
# Crear producto # Crear producto
try:
producto = Product.objects.create( producto = Product.objects.create(
name=name, name=name,
briefdesc=briefdesc or "", briefdesc=briefdesc or "",
@@ -1021,6 +1022,11 @@ def crear_producto(request: HttpRequest):
primary_image=primary_image, primary_image=primary_image,
creator=request.user creator=request.user
) )
except DataError as e:
logger.exception("ERROR Creating product: " + str(e))
messages.error(request, "Se ha excedido el limite de 1000 caracteres en Descripción corta o el limite de 5000 caracteres en Descripción.")
categories = Category.objects.all()
return render(request, "tienda/crear_producto.html", {"categories": categories})
_invalidate_product_cache([producto.id]) _invalidate_product_cache([producto.id])
# Agregar imágenes secundarias si se proporcionan # Agregar imágenes secundarias si se proporcionan