TIL95. Django Many to Many

Jaeyeon·2021년 5월 1일
0

최근 2차 프로젝트 중 ManytoMany 관계의 CRUD가 자연스럽다고 생각하지 못하여
간단하게 블로깅을 해보려고 한다.

models.py에서의 MTM관계 설정 유무


현재 Notification과 Tag는 NotificationTag라는 중간테이블로 연결되어있다.

그중에서 notification 테이블에 manytomanyfield를 설정해놓았는데 이것은 작성을 해도 되고 작성을 하지 않아도 상관없다.
하지만 작성을 한다면 훨씬 코드가 간결해진다.

ManytoManyField를 지정해놓았을 때 (get)

1번 공고(notification)에 해당하는 태그(tag)를 가져와보겠다.

반대로 1번 태그에 해당하는 공고를 가져와보겠다.

이 두개의 코드에는 약간의 차이가 있다.
공고 -> 태그로 갈때는 정참조(models.py Notification테이블에 manytomany설정) 되어 있기 때문에 쉽게 가져 올 수 있다.
태그 -> 공고로 갈때는 역참조 되어 있기 때문에 _set을 이용하면 된다.

ManytoManyField를 지정해놓지 않았을 때 (get)

공고(Notification) 와 태그(Tag)는 서로의 존재를 모르기 때문에 무조건 중간테이블을 거쳐서 가야한다.
위와 똑같이 1번 공고에 해당하는 태그를 가져와보겠다.

정말 복잡하고 어렵다..

ManytoManyField를 지정해놓았을 때 (create)

이번에는 다른 데이터베이스를 가서 실험을 해보겠다.

커머스 사이트에서 유저(user)와 쿠폰(coupon)의 관계다.
한 유저가 쿠폰을 많이 가질 수 있고, 한 쿠폰이 많은 유저들에게 뿌려질 수 있으므로 다대다 관계!

정말 간단하다..
중간 테이블(user_coupons)을 거치지 않았는데 잘 들어가 있을까...?
확인해보자!

아주 잘 들어가있다..
지금껏 mtm필드 안거치고 create하는 방법은 몰랐는데..새롭고 간편하다.

ManytoManyField를 지정해놓지 않았을 때 (create)

똑같이 실험해보자!

많이 복잡하진 않지만 mtm필드를 지정해놓았을 때가 훨씬 간편하다!

결론은 ManytoManyField를 설정해놓으면 불필요한 쿼리문을 줄일 수 있고 코드 작성도 훨씬 간결해진다!

profile
생각하는 개발자 되기

0개의 댓글