Django - ORM 쿼리 동시 처리 transaction 적용

일단 안 정보는 적어둬야 한다. SQL는 한번에 하나씩 수행되므로, 하나의 atomic 으로 묶여야 하는 오퍼레이션의 경우에는 처리 방법이 따로 있어야 할 듯 했는데....정답이 있었네

 

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=pjok1122&logNo=221609547295 

 

[Python / Django] DetailView, ListView, FormView, Form 활용하기 (오버라이딩, 전달 객체 추가, 인자 추가)

1. DetailView (Template에 추가 데이터 전달하기) DetailView는 queryset이나 model을 전달받고, url...

blog.naver.com

  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