데이터 분석 기술 블로그

DB에 대하여(15)_Django ManyToManyField (feat. Django) 본문

DB

DB에 대하여(15)_Django ManyToManyField (feat. Django)

데이터분석가 이채은 2024. 5. 2. 01:42
# 변경 전
doctor.patient_set.all()

# 변경 후
doctor.patients.all()

ManyToManyField(to, **options)

Many to many 관계 설정 시 사용하는 모델 필드입니다.


1. ManyToManyField's Arguments

1-1 'related_name' arguments

역참조시 사용하는 manager name을 변경합니다.

class Patient(models.Model):
    doctors = models.ManyToManyField(Doctr, related_name='patients')
    name = models.TextField()

1-2 'symmetrical' arguments

ManyToManyField가 동일한 모델을 가리키는 정의에서만 사용합니다. 기본값: True

# 예시

class Person(models.Model):
    friends = models.ManyToManyField('self')
    # friends = models.ManyToManyField('self', symmetrical=False)

True일 경우에는 source 모델의 인스턴스가 target 모델의 인스턴스를 참조하면 자동으로 target 모델 인스턴스도 source 모델 인스턴스를 자동으로 참조하도록 합니다 (대칭). 즉, 자동으로 내가 당신의 친구라면 당신도 내 친구가 됩니다.

Flase일 경우에는 True였을 때와 반대 (대칭되지 않음)입니다.


M:N에서의 methods

1. add()

"지정된 객체를 관련 객체 집합에 추가" (이미 존재하는 관계에 사용하면 관계가 복제되지 않습니다.)

2. remove()

"관련 객체 집합에서 지정된 모델 객체를 제거합니다."