본문 바로가기

개발/장고

[Django] 다대다 관계에서 중개 모델의 제한 사항

반응형
중개모델제한사항

중개 모델의 제한 사항

문서에서 제시한 제한사항은 아래와 같다.

1.중개 모델은 소스 모델(Group)에 대해서 무조건 딱 1개의 외래키를 포함해야한다.

2.중개 모델이 소스 모델(Group)에 대해서 2개 이상의 외래키를 포함할 경우, ManyToManyField.through_fields를 사용하여 장고가 관계에 사용해야하는 외래 키를 명시적으로 지정해야 한다

3.타겟 모델(Person)에 대해서도 동일하게 1,2번이 적용된다.

 

1번은 아래와 같은 경우를 나타낸다.

1번의 경우에는 위와 같이 코드를 짰을 때, 별 문제가 없다.

그러나, 2개 이상의 외래키가 되는 경우는 문제가 된다 2번의 경우이다.

이 경우 makemigrations 했을 때, 아래와 같은 에러가 뜬다 - 문맥 상 Validation Error 라는게 어느 것을 말하는지 확실하지 않지만, 아마도 아래 에러를 말하는 것으로 추정된다.

이 에러를 해결하기 위해서는 through_fields 를 지정해주어야 한다 2번은 이 문제를 해결하기 위한 방법이다.

여기서 주의할 점은 무조건 (소스모델에 대한 외래키 필드이름, 타겟모델에 대한 외래키 필드 이름) 의 순서로 써주어야 한다.

위와 같이 했을 때는 makemigration 이 정상적으로 잘되는 것을 확인할 수 있다.

FYI, 위의 문제는 타겟모델(Person)에 대해서도 똑같이 적용된다. 즉 타겟 모델의 외래키가 2개 이상 일 때도 makemigration 시에 똑같은 에러가 발생하고 똑같이 through_fields 를 지정함으로써 해결해주어야한다.

반응형