일단 안 정보는 적어둬야 한다. SQL는 한번에 하나씩 수행되므로, 하나의 atomic 으로 묶여야 하는 오퍼레이션의 경우에는 처리 방법이 따로 있어야 할 듯 했는데....정답이 있었네
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pjok1122&logNo=221609547295
def clean(self):
cleaned_data = super().clean()
...
with transaction.atomic(): (4)
order = Order(
user=user,
product=product,
quantity=quantity
)
order.save()
product.stock-=quantity
product.save()
(4) transaction.atomic은 여러 개의 SQL 문을 하나의 연산으로 보고 처리하도록 하는 함수입니다. order는 접수가 되었는데, 에러로 인해 상품의 재고가 감소하지 않는 문제점을 사전에 제거합니다. ( 위치는 django.db.transaction에 존재합니다. )
끝
Kindel Media 님의 사진, 출처: Pexels