프로그래밍/Django & Flask

[Django] 참조 & 역참조

대인보우 2020. 11. 25. 12:17
반응형

좋아요 기능을 만들기 위해 공부하고 있는데 역참조가 나와서 잠깐 정리!!

 

 

다음과 같은 Model이 두 개가 있다고 가정해보자.

집 model은 살고있는 사람, 방의 개수와 같은 정보가 필요하다.

그 중 사람 column은 '사람' 모델을 Foreign Key로 지정한 값이다. 

사람 model은 이름, 나이와 같은 정보를 가지고 있다.

 

참조

위와 같은 모델이 존재할 때, 집 모델에서 사람(Foreign Key)를 불러들이는 걸 참조라고 한다

 

역참조

위와 반대로 사람 모델집 모델을 불러들일 때를 역참조라고 한다. 

 

역참조를 사용하는 방법

 

1) _set manager를 사용하는 방법이 있다.

- person.house_set.all (참조되고 있는 모델(사람).참조하는 모델(집)_set.all )

 

2) related_name 사용

다음과 같은 모델이 존재한다고 할 때(해당 모델은 자기 자신을 참조하고 있는 모델이다)

참조되어지고 있는 모델 (AUTH_USER_MODEL)에서 MyUser를 보고 싶으면 'following'을 통해서 접근하면 된다.

class MyUser(AbstractUser):
    # user_nickname = models.CharField(max_length=30)
    # user_photo = models.ImageField(upload_to="images", default='images/santa.png', blank=True)
    # user_intro = models.TextField(blank=True)

    # 좋아요 객체
    follower = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='following') 

* 나를 좋아요 한 사람 

MyUser.follower.all()

* 내가 좋아요 한 사람

MyUser.following.all()

반응형