Django ManyToManyField
n:n(다대다) 관계의 데이터 테이블의 경우, Junction table을 생성해야 하는데,
이때, 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로 사용할 수 있다.