UniqueTogetherValidator

이승연·2022년 5월 11일
0

DJango

목록 보기
11/11

다대다 관계에 있는 테이블 A와 B 두개를 엮는 중간 테이블 AB가 있다. 이때, AB테이블에서 A테이블의 필드 a와 B테이블의 필드 b의 쌍이 unique해야 한다. 각 필드를 데이터베이스 레벨에서 유니크로 설정하면 ab' 쌍이나 a'b쌍이 만들어지지 않기 때문에 그렇게 할 수는 없었다. 어떻게 해결했는지에 대한 과정!

  • REST framework에서의 validation은 serializer에서만 시행되는데 데이터를 직렬화할 때 적용되는 규칙을 한 곳에서만 정의하면 되기 때문에 매우 유용하다. 그동안 나는 프로젝트에서 validation을 많이 활용하지 않았기 때문에 이게 얼마나 유용한지 몰랐다!
  • validator 이용할 생각을 하기 전에는 update 메서드를 상속받아서 a와 b가 함께 있는 객체를 필터링이 존재하면 exception을 raise하는 방식으로 하려고 했다. 그러나 이렇게 하니 내가 원하는 에러 메세지를 뿌릴 수 없고 500에러로만 처리해야 한다는 점이 너무 찝찝했다.
  • 그 때 발견한것이 uniquetogethervalidator! 내가 타게팅하는 쿼리셋과 하나의 쌍이 unique하게 존재하야하는 필드값의 이름만 입력해주면 된다.
  • 이렇게 세팅해주었을 때, 유니크한 쌍이 아닌 객체를 만드려고 시도하면 다음과 같은 에러가 난다:

행복!

0개의 댓글