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()}
)
위 메서드와 비슷한 방식이다. 객체가 있으면 값을 업데이트하고, 없으면 객체를 만든다.
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},
)