Python/Django
Python Django: symmetrical option in ManyToMany # ManyToMany에서 한쪽만 관계 설정 # 테이블 자신을 참조하는 경우
taltal
2023. 10. 16. 19:56
728x90
반응형
Django에서 ManyToMany를 통해 Table을 연결하면,
예를 들어 A, B 테이블을 ManyToMany를 통해 연결시
A에서 B를 연결할 경우, B에서 A 방향으로도 자동 연결
그러나 A -> B를 연결 하더라도, B -> A로 자동연결이 되는 것을 원치 않는 상황도 존재
예를 들어
A 의 row에 대한 추천 상품으로 B의 row 들을 지정한다고 해보자.
그러나 B의 row에 대한 추천 상품은 A가 아닌 C를 지정하길 원한다고 하면,
기존 ManyToMany 방식으로 B의 추천상품을 불러올 시 A가 함께 가져와진다.
이는 ManyToMany의 기본 옵션이 상호 대칭적인 symmetrical = True 이기 때문
따라서 ManyToMany설정시 symmetrical = False 옵션으로 주면, A -> B, B -> C (B -> A가 안걸리도록)와 같은 형태로
연결 가능
이 옵션을 사용할 경우, 역참조를 어떻게 할것인지를 반드시 정해줘야 한다.
=> related_name 설정을 통해 B -> A 방향의 연결을 불러올 수 있다.
* 참조할 테이블을 자기 자신으로 하는 경우 예시 ('self')
recommended_item = models.ManyToManyField('self', symmetrical=False, related_name='inversed_item')
728x90
반응형