Django 009 | ManyToMany

This Is Empty.·2021년 9월 15일
0

Django

목록 보기
9/20

ManyToMany : 다대다 관계

다대다 관계는 한 테이블의 여러 레코드가 다른 테이블에 있는 여러 레코드와 연관되어 있는 경우에 발생한다.
위의 ERD로 풀어 설명하자면, 한 배우(actor)는 여러 영화(movie)에 출연할 수 있고, 한 영화(movie)는 여러 배우(actor)를 출연시킬 수 있기 때문에 다대다 관계이다.

django에서는 다음의 2가지 방법으로 다대다 관계의 모델을 정의할 수 있다.

  • ManyToManyField
  • ForeignKey

ManyToManyField

ManyToManyField는 위와 같이 사용한다.
ManyToManyField를 사용하면 Django는 자동으로 다대다 관계를 나타내는 중간 조인테이블을 생성해 준다. 생성하는 테이블의 이름은 다대다 필드의 이름과 이를포함하는 모델의 테이블 이름을 사용하여 생성된다.


USE

ManyToManyField(to, related_name=None, related_query_name=None, limit_choices_to=None, symmetrical=None, through=None, through_fields=None, db_constraint=True, db_table=None, swappable=True, **kwargs)

주로 사용되는 옵션

  • related_name : 관련 개체에서 다시 이 개체로의 관계에 사용할 이름. 역참조 관계를 정참조 관계처럼 사용할 수 있다.
  • through : 중간 테이블을 수동으로 지정하려는 경우 이 옵션을 사용한다.
  • db_table : 다대다 데이터를 저장하기 위해 생성할 테이블의 이름. 사용하지 않으면 Django는 테이블과 필드 자체의 이름을 기반으로 테이블 명을 설정한다.
  • through_field : 명시적으로 다대다 관계에 사용할 키를 지정해준다. 다대다 관계에 참여하는 모델 중 하나에 대한 중개 모델에 둘 이상의 외래키가 있는경우 에러가 발생하는것을 방지하기 위해 사용하는 옵션이다.


⬆️ migration 파일

⬆️ migrate적용된 테이블

⬆️ 중간 테이블이 가지고 있는 column

위의 models.py로 데이터베이스에 migrate한 결과 actors_movies라는 중간 테이블이 생성되었다. actors_movies가 가지고 있는 column은 id, actor_id, movie_id이다.

ManyToMany의 장점

1. 중간테이블을 거치지 않고 바로 데이터를 추가할 수 있다.(add)


⬆️ actors 테이블 속 데이터

⬆️ movies 테이블 속 데이터


add를 사용하여 중간테이블을 거치지 않고 바로 추가가 가능하다.

2. 중간테이블을 거치지 않고 데이터를 가져올 수 있다.(get)

참고
Django | Many-to-many relationships
Django | Model field reference - ManyToManyField

profile
Convinced myself, I seek not to convince.

0개의 댓글