내일배움캠프/내일배움캠프 TIL
내일배움캠프 TIL 69일차 - 예외처리 해결
sogummi
2023. 6. 16. 01:56
Today I Learned
주문 수량이 상품 재고 보다 많을 시 예외 처리 하는데
ValidationError로 예외 처리 문구는 잘 떴는데 실제로는
order_info가 빈 채로 db 저장이 되고 있었다
변경 전
def create(self, validated_data):
order_quantity = validated_data.get('order_quantity')
product_key = validated_data.get('product')
order = super().create(validated_data)
product = ShopProduct.objects.get(id=product_key.id)
if product.product_stock >= order_quantity:
product.product_stock -= order_quantity
product.save()
order_info_list = []
order_info = ShopOrderDetail(
order=order,
product=product,
product_count=order_quantity,
order_detail_status=0
)
order_info_list.append(order_info)
ShopOrderDetail.objects.bulk_create(order_info_list)
return order
else:
raise ValidationError("상품 재고가 주문 수량보다 적습니다.")
변경 후
def create(self, validated_data):
order_quantity = validated_data.get('order_quantity')
product_key = validated_data.get('product')
product = ShopProduct.objects.get(id=product_key.id)
if product.product_stock >= order_quantity:
product.product_stock -= order_quantity
product.save()
order_info_list = []
order = ShopOrder.objects.create(**validated_data)
order_info = ShopOrderDetail(
order=order,
product=product,
product_count=order_quantity,
order_detail_status=0
)
order_info_list.append(order_info)
ShopOrderDetail.objects.bulk_create(order_info_list)
return order
else:
raise ValidationError("상품 재고가 주문 수량보다 적습니다.")
해결 :
super().create(validated_data)를 호출하는 위치의 문제였다!
1. 변경 전 : order 객체를 먼저 생성한 후 해당 객체를 활용하여 상품 재고와 주문 수량을 비교하고 처리하는 로직
=> order_info가 빈 채로 DB에 저장되는 문제
2. order객체 생성 전 상품 재고와 주문 수량을 비교하고 처리