get_or_create
장고(Django)를 이용해 웹개발을 하다보면 종종 get_or_create
라는 메서드를 마주치곤 한다.
이번 포스팅은 이 글을 참고해 작성했다.
get_or_create
메서드는 객체(object)를 조회할 때 유용하게 사용되는 메서드이다. 이 메서드는 (object, created)
라는 튜플 형식으로 반환을 한다. 첫번째 인자(object)는 우리가 꺼내려고 하는 모델의 인스턴스이고, 두번째 인자(created)는 boolean flag
이다.
flag란,
TRUE
또는FALSE
를 갖는 온오프 스위치라고 생각하면 된다. 딸깍하고 스위치를 키면 TRUE, 스위치를 끄면 FALSE이다.
아무래도 두번쨰 인자가 TRUE
또는 FALSE
를 갖고 있으니 중요한 역할을 할 것이다.
TRUE
라면 인스턴스가get_or_create
메서드에 의해 생성되었다는 걸 의미한다.FALSE
라면 인스턴스가 데이터베이스에서 꺼내왔음을 의미한다. (즉, 기존에 있던 것임)
활용예제
설명을 했으니, 예제를 통해서 어떻게 활용할 수 있을지 살펴보도록 하자.
follow, is_follow =if not is_follow:else:return follow
is_follow는 TRUE
또는 FALSE
를 갖고 있는 flag
이다.
is_follow
가 TRUE
라면 팔로우되지 않은 상태이고 user
를 팔로잉한다는 것을 의미한다.
반대로, is_follow
가 FALSE
라면 기존 DB에 이미 인스턴스가 이미 있다는 상태(즉, 이미 팔로잉 관계)를 의미한다.
is_follow
가 TRUE
또는 FALSE
라는 값만을 가질 수 있다는 것을 생각하면 if not is_follow
의 의미는 값이 FALSE
라는 의미이며, if is_follow!
와 같은 의미이다.
즉, 값이FALSE
일때는 follow.delete()를 해줌으로써 언팔로우를 한다. 그 반대의 경우(즉, 처음으로 get_or_create
메서드에 의해 새로운 인스턴스가 만들어진 경우)라면 팔로우를 한다는 의미이다.
'프로그래밍 > Django' 카테고리의 다른 글
[DJango] AbstractBaseUser vs AbstractUser 비교하기 (0) | 2017.07.15 |
---|---|
[Django] Django + Celery + Redis 이용하기 (5) | 2017.07.15 |
[Django] Django Rest Framework(DRF) 알아보기 1부 (2) | 2017.07.13 |
[Django] settings 환경 분리하기 (0) | 2017.07.11 |
[Django] OneToOne 모델 이해하기 (0) | 2017.06.10 |