- 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업
- 물리적인 데이터베이스 모델로 만들어 고객의 요구에 따라 특정 정보 시스템의 데이터베이스에 반영하는 작업
- 관계 필드를 가지지 않은 모델
- 관계 필드를 가진 모델
- 두 모델을 중개하는 모델
- 두 모델과 각각 N:1 관계를 가짐
- 장고는
ManyToManyField
를 통해 중개 테이블을 자동으로 생성
ManyToManyField(to, **options)
- 다대다 관계 설정시 사용하는 모델필드
- 하나의 필수위치인자(관계 설정을 할 모델 클래스)가 필요
- 모델 필드의 RelatedManager를 사용하여 관련 개체를 관리
add()
,remove()
,create()
,clear()
- 장고는 다대다 관계를 나타내는 중개 테이블을 만듦
- 테이블이름은 관계를 설정한 두 테이블의 이름을 조합해서 만듦
db_table
인자를 사용해 중개 테이블의 이름 변경 가능
- target model이 source model을 참조할 때 사용할 manager name
ForeignKey()
의related_name
과 동일
- 중개 테이블을 수동으로 지정할 때 사용
- 중개테이블에 추가 데이터를 사용해 다대다 관계와 연결
- default:
True
ManyToManyField
가 동일한 모델을 가리키는 정의에서만 사용- True인 경우
_set
매니저 추가 X- source 모델이 target 모델을 참조하면 자동으로 반대 방향의 참조 성립
- False인 경우
- 대칭을 원하지 않는 경우 사용
- N:1 혹은 M:N 관계에서 사용 가능한 문맥
- 자동으로 역참조시 사용할 수 있는 manager 생성
- N:1에서는 target 모델 객체만 사용 가능
- M:M 관계에서는 관련된 두 객체 모두 사용 가능
- methods 종류
add()
,remove()
,create()
,clear()
,set()
- 지정된 객체를 관련 객체 집합에 추가
- 이미 존재하는 관계에 사용하면 관계 복제 X
- 모델 인스턴스, 필드 값(pk)를 인자로 허용
- 관련 객체 집합에서 지정된 모델 개체를 제거
- 내부적으로
QuerySet.delete()
를 사용하여 관계가 삭제됨 - 모델 인스턴스, 필드 값(PK)를 인자로 허용
- id
- [containing_model]_id
- [other_model]_id
- id
- from_model_id
- to_model_id