320x100
흠.. 이쯤되면 일부러 저자분이 에러를 유도하시는건지 의문이 들정도로 에러가 많이 나온다.
물론 지금 이 상황은 의도적이였다고 써있다.
#1 상황
ERRORS:
pybo.Question.author: (fields.E304) Reverse accessor 'User.question_set' for 'pybo.Question.author' clashes with reverse accessor for 'pybo.Question.voter'.
HINT: Add or change a related_name argument to the definition for 'pybo.Question.author' or 'pybo.Question.voter'.
pybo.Question.voter: (fields.E304) Reverse accessor 'User.question_set' for 'pybo.Question.voter' clashes with reverse accessor for 'pybo.Question.author'.
HINT: Add or change a related_name argument to the definition for 'pybo.Question.voter' or 'pybo.Question.author'.
이런 에러가 떴다.
마지막 줄의 힌트에 보면
"관계되어있는 이름을 인수로 사용하고 있다.
이것에 무언가를 추가하거나 지금 사용중인 것을 변경해서
정의해라
pybo.Question.voter 와
pybo.Question.author이다.
#2 정리
즉, pybo안의 같은 클래스 안에 속해있는 voter와 author는 같은 인수를 가지고 있으므로
어떻게든 중복되지 않게 해달라는 것이다.
author = models.ForeignKey(User, on_delete=models.CASCADE)
이게 author로써 가지는 인자중 User를 가지고 있고 (on_delete는 성질 자체가 인자라기보다는 인자를 어떻게 할건지에 대한 옵션개념이라 에러에 영향을 미치지는 않는것으로 알고있다)
voter = models.ManyToManyField(User) # voter 추가
그리고 이것이 voter이다. 마찬가지로 인자를 User로 가지고 있다.
#3 해결
이를 해소하기 위해서 사용할 방법으로 제시 된 것은 related_name을 붙여주는 것이다.
딱히 어떤 기능인지는 설명이 없지만 개념적으로 봤을때 User는 사용해야겠고. 중복이 안된다는 것을 인지시켜 주기 위해서
related_name에 각각의 이름이 다른 태그를 만들어준다. 라는 개념으로 접근하면 맞는것 같다.
author = models.ForeignKey(
User, on_delete=models.CASCADE, related_name='author_question')
voter = models.ManyToManyField(
User, related_name='voter_question') # voter 추가
결과적으로는 이렇게 서로 related_name을 다르게 붙여줌으로 인해서 해결 되었다.
300x250
'개발일지 > 임시카테고리' 카테고리의 다른 글
Django - 장고 검색기능 추가 후에 value url로 전달 안됨 현상 - 해결 (0) | 2022.12.26 |
---|---|
Django - ModuleNotFoundError: No module named 'n12br' - 해결 (0) | 2022.12.25 |
Django - No Comment matches the given query. - 해결 (0) | 2022.12.22 |
Django - 화면에 표시되는 00을 해결하기 - 해결완료 (0) | 2022.12.22 |
Django - SyntaxError: invalid syntax - 해결 (0) | 2022.12.21 |