Django update_or_create

개발자 강세영·2022년 6월 11일
0

TIL

목록 보기
41/65

update_or_create는 장고에서 제공하는 메서드로 get_or_create와 비슷하게 작동한다.
객체가 이미 존재하는 경우 update 하고 없는 경우 create하는 것이다.
get_or_create와 마찬가지로 (object, created) 튜플을 반환한다.
object는 update되거나 create되는 객체이고 created는 boolean으로 객체가 create되면 True, 이미 있다면 False로 반환된다.
경쟁조건을 피하기 위해 get_or_create와 마찬가지로 defaults 파라미터를 활용할 수 있다.

defaults = {'first_name': 'Bob'}
try:
    obj = Person.objects.get(first_name='John', last_name='Lennon')
    for key, value in defaults.items():
        setattr(obj, key, value)
    obj.save()
except Person.DoesNotExist:
    new_values = {'first_name': 'John', 'last_name': 'Lennon'}
    new_values.update(defaults)
    obj = Person(**new_values)
    obj.save()

# 위 코드와 같은 결과가 나오는 update_or_create
obj, created = Person.objects.update_or_create(
    first_name='John', last_name='Lennon',
    defaults={'first_name': 'Bob'},
)

출처: https://docs.djangoproject.com/en/4.0/ref/models/querysets/#update-or-create

0개의 댓글