Sparta Coding Club/Today I Learned [TIL]

[TIL] #DAY - 038 - related_name = [classname]_set(내일배움캠프AI 3기)

양한마리 2022. 10. 28. 12:52
728x90



related_name!? related_name!

정참조 <-> 역참조

팔로워 <-> 팔로잉

포테이토피자 <-> 감자가 들어간요리 (?)

어떤 경우에 related_name을 사용하는걸까?

 




 

정참조와 역참조 객체 서로 호출하기

class Feed(models.Model):
    title = models.CharField(max_length=30)
    category = models.CharField(max_length=30)
    image = models.ImageField(default="", upload_to="feed_images/")
    content = models.TextField()
    user = models.ForeignKey(UserModel, on_delete=models.CASCADE)
    like_authors = models.ManyToManyField(UserModel, related_name='like_feeds') # <-- 해당 부분 참고
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return str(self.title)

현재 사용하고있는 부분은 Feed라는 모델에 like_authors에서 사용중이다.

해당 필드는 ManyToManyField를 사용하여 UserModel 을 참조하고있다.

하지만 반대로 UserModel에서 like_authors 에서 참조되고있는 Feed를 불러오고싶다면 어떻게 해야할까?

그럴때 사용하게 related_name으로 지정한 like_feeds 로 불러오면된다.

추가로 한가지 더 짚어가자면 related_name을 사용하지않아도 기본 값으로 [classname]_set 이 지정되어있다.

위에 내용에서 따로 지정을하지 않았다면 해당 값은 UserModel_set으로 사용할수있을것이다.

다만 위에 user를 저장해주는 필드값에서 UserModel이 지정되어있기때문에 중복이되어 이렇게 새로 이름을 지정해주는것이다.

 

정리

웹서비스 내용이 복잡해지면 복잡해질수록, 참조를 사용하는 경우가 많은데, 그런 경우들에서 꼭 필요한 존재인거같아서

이렇게 TIL로 정리해보는 시간을 가져보았고, related_name을 사용하여 필요없는 코드들을 줄일수있또록 해보자!

 

 

 

728x90
반응형