Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
Django에서 Unique 집합 만들기.
#python
4년 전
2,199
4

(velog를 개설해 봤습니다.)

간단하게 이야기합니다.(간단하지 않을수도 있음...제가 문장력이 딸려서)

undefined

Airbnb 클론의 Reservation 모델을 예로 들었습니다.(강의에서는 날짜 모델은 따로 떨어져있는데 여기에선 간소화시켰습니다.)

결론부터 말하면 모델의 class Meta 정의에서 constraints를 정의해서 그 안에서 models.UniqueConstraint로 fields에 묶어서 Unique화 시킬 필드를 나열하고 그 유니크 키에 대한 이름을 적어주면 됩니다.(제 이상한 문장을 읽으시는 것보다 위의 코드를 보시는 게 좋습니다.)

한 문장으로 정리하자면,

"만약에 user1과 user2가 있는데 user1이 2021년 1월 9일에 대한 예약을 이미 생성한 경우, 그 유저는 실수로 같은 날에 예약을 할 수 없다." 입니다. 마치 배민에서 2021년 1월 9일에 치킨을 주문했는데 그 날 실수로 또 치킨을 주문하려 한다고 할 때 그 참사를 막는 것과 같습니다.

Airbnb의 가정으로 돌아가서 1월 9일에 user1이 예약했다면 user2가 같은 방에 같은 날짜에 예약을 하면 안 되므로(그런 대참사가...) 그것은 위의 reserve_date 필드의 unique=True에서 막아줍니다.

에러는 모두 IntegrityError가 발생하며 date만의 유니크의 경우 reserve_date가 겹친다는 에러가 표시되고, constraints에 걸리는 경우 user_id와 reserve_date가 겹쳐서 오브젝트 생성이 불가능하다는 에러를 내게 됩니다.

어느 쪽이든 이미 존재하는 예약이라는 뜻이니 views.py에서 IntegrityError에 대한 예외처리만 해주면 끝일 것 같네요.

출처 : 저의 Velog 첫 글 

(제가 작성했습니다.)

4 comments