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
반응형
'Sparta Coding Club > Today I Learned [TIL]' 카테고리의 다른 글
[TIL] #DAY - 040 - 프로젝트 미포함 파일 장고 사용하기! (내일배움캠프AI 3기) (0) | 2022.11.04 |
---|---|
[TIL] #DAY - 039 - 프로젝트 준비 / 트렐로 (내일배움캠프AI 3기) (0) | 2022.10.31 |
[TIL] #DAY - 037 - onclick? = location.href & location.replace! (내일배움캠프AI 3기) (0) | 2022.10.27 |
[TIL] #DAY - 036 - Serializer란? (내일배움캠프AI 3기) (0) | 2022.10.26 |