[Django] ManyToMany

kimlilo·2021년 11월 20일
0

Django ManyToManyField

n:n(다대다) 관계의 데이터 테이블의 경우, Junction table을 생성해야 하는데,

  1. Junction table을 직접 django modles.py에서 새로운 class를 선언해주거나,
  2. ManyToManyField를 사용하는 방법이 있다.
    2-1) ManyToManyField만을 사용하는 경우,
    2-2) ManyToManyField에 related name을 지정하는 경우가 있다.

이때, ManyToManyField의 경우, 1)처럼 따로 class를 선언하여 테이블을 생성하지 않고도, data 입력만으로도 django에서 다대다 연결을 가능하게 해준다.

ManyToMany

ManyToMany Field를 사용하여 Junction table을 생성할 때, 해당하는 table이 다른 기능으로의 활용이 불필요하고 참조의 기능으로만 활용하는 경우에는 장고가 알아서 생성해주도록 하면 된다.

a1 = Actor.objects.get(id = 1)
a1.save()
m1 = Movie.objects.get(id = 1)
m1.save()
a1.movie.add(m1, m2, m3)

ManyToMany + through =

내가 별도로 선언한 class를 활용하여 junction table을 만들고 싶을 때, through를 사용하여 연결시켜 준다.(junction table을 커스터마이징 하는 개념으로 활용할 수 있음)
junction table이 integer 값으로만 구성된 테이블이 아닌 다른 역할로도 활용함

ManyToMany + related_name

ManyToManyField("Movie", related_name="actors")를 하게 되면
역참조 관계임에도 movie.actor_set.all() > movie.actors.all로 사용할 수 있다.

profile
킴릴로

0개의 댓글