Django - get_or_create

김우식·2022년 7월 3일
0

get_or_create는 무엇일까 ?

get_or_create(defaults=None, **kwargs)
주어진 객체 kwargs(모델에 모든 필드에 대한 기본값이 있는 경우 비어 있을 수 있음)를 사용하여 객체를 검색하고 필요한 경우 생성하는 편리한 방법입니다.
(object, created)의 '튜플'을 반환합니다. 여기서 개체는 검색되거나 생성된 개체이고 생성된 개체는 새 개체 생성 여부를 지정하는 부울입니다.
출처 : https://docs.djangoproject.com/en/4.0/ref/models/querysets/

get_or_create는 해당 조건의 값으로 생성된 데이터가 있다면 그 데이터를 get해주고, 없다면 생성해주는 메소드이다. 사용 예시를 보면서 이해해보자.

get_or_create 적용시켜보기

if not cart_object.exists():
	Cart.objects.create(user_id = user.id, product_option_id = product_option_id)
    cart_object.update(quantity = data['quantity'])
	return JsonResponse({"message" : "CREATE_CART_SUCCESS"}, status=201)

else:
	cart_object.update(quantity = data['quantity'])
	return JsonResponse({"message" : "UPDATE_CART_SUCCESS"}, status=201)

cart라는 테이블에 조건의 user_id와 product_option_id가 일치하는 데이터가 존재할 경우와 아닌경우를 나누는 exists 조건문을 작성해보았다.

하지만 get_or_create메소드를 사용한다면, 이렇게 불필요한 if문을 사용할 필요가 없다.

cart, created = Cart.objects.get_or_create(
	user_id           = user.id, 
    product_option_id = product_option_id.id, 
    defaults={'quantity': data['quantity']}
    )

if not created:
	cart.quantity = data['quantity']
	cart.save()

같은 결과를 반환하지만, 메소드를 사용하여 훨씬 가독성도 높고 간결한 코드를 작성할 수 있었다.

profile
반가워요!

0개의 댓글