작성
·
303
0
강의하단 보충내용이 이해가 되지 않아서 질문드립니다.
follower_set = models.ManyToManyField(
"self", blank=True, symmetrical=False,
related_name="following_set",
)
위와같이 설정하면
following_set 을 따로 만들지 않는건가요?
following_set 이 있으면 makemigrations 에러가 발생하고,
지운다고 following_set 테이블을 만들어주는 것 같지 않아서요
related_name 에 대한 이해가 아직 부족해서 일단 아래와 같이 처리했는데 보충내용에 대한 설명 더 부탁드립니다.
follower_set = models.ManyToManyField("self", symmetrical=False, related_name="+", blank=True)
following_set = models.ManyToManyField("self", symmetrical=False, related_name='+', blank=True)
답변 2
0
0
안녕하세요.
models.ManyToManyField 지정을 통해, A 모델과 B 모델 간의 관계를 저장하는 새로운 테이블이 생성이 됩니다. 기본적으로 필드는 총 3개 (id(기본키), a_id (A모델에 대한 외래키), b_id (B모델에 대한 외래키))로 스키마가 구성이 되구요. 두 모델 간의 M2M 관계 지정은 이 테이블 하나면 충분합니다.
A모델과 B모델 간에 ManyToManyField 관계를 지정했을 때,
1. A모델을 통해 B모델을 조회할 때 follower_set 속성으로 참조를 한다고 한다면,
2. B모델을 통해 A모델을 조회할 수도 있습니다. 역참조인거죠. 이는 related_name으로 지정한 following_set 속성으로 조회할 수 있습니다.
그러니, following_set 필드를 별도로 추가하실 필요가 없습니다. 하나의 M2M 필드를 참조/역참조의 형태로 활용하시면 됩니다.
유저A가 유저B를 팔로잉을 한다는 것은 역으로 유저B의 팔로워 중에 유저A가 있다는 뜻이니깐요.