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
반응형