본문 바로가기
장고 프레임워크

HINT: Add or change a related_name argument to the definition for 'Post.like_user_set' or 'Post.author'.

by 문자메일 2020. 6. 11.

class Post(BaseModel):

    author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='my_post_set'on_delete=models.CASCADE)

    photo = models.ImageField(upload_to="instagram/post/%Y/%m/%d")

    caption = models.CharField(max_length=500)

    tag_set = models.ManyToManyField('Tag'blank=True)

    location = models.CharField(max_length=100)

    like_user_set = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, related_name='like_post_set')

 

 

어떤 User가 작성한 포스팅 목록을 받아올 때 

-> Post.objects.filter(author=user) 로 쿼리셋 획득 가능

->  user.post_set.all() 라는 reverse name으로 가져올 수도 있다.

    저 이름은 ForeignKey 관계에서 자동으로 생성해 주는 이름인대 'related_name' 속성값을 지정해주지 않으면

    모델명_set으로 자동으로 지정이 된다.

 

위 코드에서 related_name='my_post_set' 을 지정 안 했을 때  author = models.ForeignKey 와  like_user_set = models.ManyToManyField 에서 둘 다 post_set 이름으로 충돌이 나서 DB Migrations(table 스키마) 하고는 상관이 없지만, Django ORM에서 참조되는 이름으로 사용할 때 에러가 발생하게 되므로 제목에 적힌 에러를 발생하게 된다.

 

 

user.my_post_set.all() -> 해당 User가 작성한 포스팅 목록

user.like_post_set.all() -> 해당 User가 좋아요 한 포스팅 목록

'장고 프레임워크' 카테고리의 다른 글

5 - mixins 상속을 통한 APIView 로직 재사용  (0) 2020.06.17
forms.py  (0) 2020.06.13
4) APIView를 활용한 뷰 만들기  (0) 2020.06.07
views.py에 관하여  (0) 2020.06.04
Django Template 문법에 관하여  (0) 2020.06.03

댓글