Get / Update_or_create

Get_or_create

Get_or_create(default = none, **kwargs)는 (objects, created)와 같이 튜플 형태로 반환한다. 여기서 objects은 반환되거나 create되는 부분이며 created는 boolean 값으로써 True, False를 반환한다. object가 있다면 object와 False가 반환된다.

class Cart(TimeStamp):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=0)
    
    #quantity = models.IntegerField()
cart, is_created = Cart.objects.get_or_create(
                user       = user,
                product_id = product_id,
                quantity   = quantity
            )
            cart.quantity += quantity
            cart.save

장바구니 담기 기능을 예로 가져왔다. 입력된 값이 db에 없을 경우에 db에 create 해주고 db에 있다면 cart라는 변수에 해당하는 row가 담긴다. cart라는 변수의 quantity를 불러와서 값을 변경해주고 저장한 코드이다. 모델의 quantity에서 default를 0으로 지정해줬기 때문에 create가 가능하다.

Update_or_create

위의 get과 비슷한 방식으로 동작한다. 값이 없다면 create를 해주고 없다면 값을 update할 수 있다.

obj, created = Person.objects.update_or_create(
    first_name='John', 
    last_name='Lennon',
    defaults={'first_name': 'Bob'},
)

좋은 웹페이지 즐겨찾기