Django-get_or_create와update_or_create

김경천·2021년 6월 27일
1

get_or_create

Django ORM의 get_or_create함수는 데이터베이스에 객체가 있으면 가져오고, 없으면 객체를 만드는 함수입니다. 두가지 기능을 할수있어 코드를 간결하게 만들어줍니다.
반환은 (object,created)로 튜플 형식으로 반환한다.
object는 우리가 얻고자 한 모델의 인스턴스이고
created는 boolean flag이다.

예시

1차 프로젝트 당시 활용해봤다 - 장바구니 등록 구현

order, is_created = Order.objects.get_or_create(
      user            = user,
      order_status_id = OrderStatus.PENDING,
      defaults        = {'order_number':uuid.uuid4()}
      )

update_or_create

위 메서드와 비슷한 방식이다. 객체가 있으면 값을 업데이트하고, 없으면 객체를 만든다.

예시

object, created = Person.objects.update_or_create(
	first_name = 'King', last_name='Wang',
    defaults={'first_name':'Super'},
    )

1차 프로젝트 때 활용해봤다 - 장바구니 수량변경 구현

if OrderItem.objects.filter(order=order, product_id=product).exists():
                current_amount = OrderItem.objects.get(order=order, product_id=product).amount

            order_item, is_created = OrderItem.objects.update_or_create(
                        order      = order,
                        product_id = product,
                        defaults   = {'amount':int(data['amount']) + current_amount},
                        )
profile
화이팅

0개의 댓글