본문 바로가기

Django

[Django] Many to Many 다대다 관계

Many to Many.

개념은 이해가 가지만, 실제 구체적인 적용에 있어서 헷갈리는 부분이 많았다. 실제 이번 프로젝트에 적용한 부분들을 보면서 이해하는 것이 쉬울 것 같아 참고하였다.

 

우선 다대다의 개념에 대해 간단하게 예시를 들어보자면, 피자와 토핑과의 관계가 있다.

하나의 피자에는 여러개의 토핑이 들어갈 수 있고, 하나의 토핑은 여러개의 피자에 들어갈 수 있으므로 다대다 관계 성립!

 

실제 우리 프로젝트에서도 Product 와 FilterList 의 관계가 그러했다.

하나의 상품은 여러 개의 필터를 가질 수 있고, 하나의 필터는 여러 상품에 속할 수 있으므로 역시 다대다 관계 성립!

그리고 이들의 중간 table은 ProductFilter category 였다. 

우선 이들의 관계를 설정해주기 위해서는 Product 와 Filterlist 각각이 먼저 존재해야 한다.

그리고 나서 이 둘을 이제 연결해주는건데, through 를 통해 중간 테이블이 무엇인지를 명시해줄 수 있다. 그게 아니면 장고가 자동적으로 중간 테이블을 만든다고 하는데 이부분도 더 공부가 필요하다.

 

우선 오늘 이해한 내용만 정리해보자.

 

Models.py 에서 Product 클래스에 있는 filter_list 를 봐보자.

 


filter_list = models.ManyToManyField('FilterList', through='ProductFilter', related_name='products')

 

그리고 FilterList 클래스에 있는 product를 봐보자.

 

product = models.ManyToManyField('Product', through='ProductFilter', related_name='filterlists')

 

혹시나 까먹고 이해가 안갈 미래의 나를 위해 지저분하지만, 아이패드 필기 첨부...

 

 

related_name도 이 경우와 역참조 할 때랑 상황이 어떻게 되는지 다시 한 번 정리해야 할 것 같다. 

 

'Django' 카테고리의 다른 글

[Django] Self-reference model  (0) 2020.07.05
[Django] CSV데이터_데이터베이스_업로드  (1) 2020.06.28
[Django]Select_related  (0) 2020.06.25