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객체 생성 전 상품 재고와 주문 수량을 비교하고 처리
'내일배움캠프 > 내일배움캠프 TIL' 카테고리의 다른 글
내일배움캠프 TIL 71일차 - 코드 추가 개선 (0) | 2023.06.19 |
---|---|
내일배움캠프 TIL 70일차 - 백엔드에서 페이지네이션 처리 (0) | 2023.06.19 |
내일배움캠프 TIL 68일차 - 코드 개선하기 (리액트, url통일의 중요성) (0) | 2023.06.16 |
내일배움캠프 TIL 67일차 - 테스트코드 다중이미지 업로드 (2) | 2023.06.13 |
내일배움캠프 66일차 TIL - DRF 설정 및 권한 오류 (0) | 2023.06.13 |