본문 바로가기

개발/장고

[Django] 다대다 관계에서 through, through_fields, through_defaults

반응형
다대다에서through

through와 through_fields와 through_default에 대한 정리

1. through

다대다 관계를 나타낼 때, custom 한 중개모델을 지정할 때 사용한다.

 

2. through_fields

1번에 제시된 코드를 기준으로 봤을 때, Group 모델을 소스모델, Person 을 타겟모델로 본다.

소스모델 혹은 타겟모델과 관련해서 중개모델에서 같은 모델 내 외래키가 2개 이상이면, makemigrations 단계부터 에러가 발생하게 된다. - 자세한 것은 중개모델의 제한사항에서 2번을 참고하자.

이를 해결하기 위해서, through_fields 를 지정해준다.

위와 같이 지정해주면, 오류없이 정상적으로 makemigration이 동작한다. - 더 자세한 내용은 중개 모델의 제한 사항에서 실제 오류가 발생하는 것을 확인 할 수 있다.

 

3. through_defaults

through_defaultsRelatedManager 내 메소드인 add, set, create 등의 인자로 사용이된다

그중에서 add 만 살펴보자면, 새로운 중개 모델 인스턴스를 지정할 때 사용한다. 중개모델 인스턴스가 생성되기 전에 딱 한번만 평가된다. through_defaults 예제를 보면 아래와 같다.

 

반응형