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()
"관련 객체 집합에서 지정된 모델 객체를 제거합니다."