Django-Mission / django_mission_02-ElyaSetinal

django_mission_02-ElyaSetinal created by GitHub Classroom
0 stars 0 forks source link

[김현빈] Peer Review #2

Open myunbongs opened 2 years ago

myunbongs commented 2 years ago

기존 미션에서 더 나아가 뷰와 템플릿까지 구현해주신 영채님! 정말 고생 많으셨습니다 🔥 이번에도 잘 읽고 배우고 갑니다 !

models.py in Faq, Answer model:


    created_person = models.ForeignKey(to=User, related_name='+', on_delete=models.CASCADE, verbose_name='생성자', null=True, blank=True)
    last_modify_person = models.ForeignKey(to=User, related_name='+', on_delete=models.CASCADE, verbose_name='최종 수정자', null=True, blank=True)
    created_person = models.ForeignKey(to=User, related_name='+', on_delete=models.CASCADE, verbose_name='생성자', null=True, blank=True)
    last_modify_person = models.ForeignKey(to=User, related_name='+', on_delete=models.CASCADE, verbose_name='최종 수정자', null=True, blank=True)

Answer class의 첫 번째 인스턴스의 마지막 수정자에 접근한다고 가정했을 때,

one = User.objects.get(id = 1)
last_modify_person = one.+.values()

와 같이 접근하게 될 텐데 이는 코드 이해와 가독성 면에서 불편할 뿐만아니라 모든 related_name을 모두 '+'로 설정해주셨기 때문에 잘못된 값을 가져오게 될 것 같습니다 🥺

따라서 각자 다른 User를 참조하고 있는 객체와 연관되는 related_name을 설정해줌으로써 추후 접근시 충돌이 일어나지 않게 되어야 한다고 생각합니다!

models.py line 24 :


    last_modified_time = models.DateTimeField(verbose_name='최종 수정일시', auto_now=True) #공식문서 참조, auto_now는 update에 유용한 옵션

역시 공식 문서 꼼꼼히 읽으시는 영채님!!!!!!!!!!!! 주석 보고 또 김현빈 공식 문서 꼼꼼하게 읽기로 다짐했답니다.. 헤헤...

영채님 코드 읽고 조금 더 적극적으로 커리큘럼에 임해야겠다고 생각했습니다 🥰

ElyaSetinal commented 2 years ago

다른 분들의 코드와, 레퍼런스들을 보면서 related_name의 중요성과 어떻게 작성하는지는 이해했는데, +로 설정하게 되면 저런 문제가 있을거라곤 생각치 못했습니다. related_name을 수정을 해야겠네요.

최초에 related_name을 설정하지 않았을 때, clashes with reverse accessor 에러가 발생했었고, 확인결과 related_name을 지정하지 않아 역방향 관계 이름이 동일해서 에러가 발생함을 알게 되었습니다. 그래서 내린 결론이 '역관계를 생성하지 않으면 되지 않을까' 여서 공식문서의 (ForeignKey.related_name) If you’d prefer Django not to create a backwards relation, set related_name to '+' 를 보고 사용을 해봤습니다.

현빈님의 리뷰를 읽다보니 생성되지 않는걸 직접 눈으로 확인하지 않기도 했고, 역방향 관계를 쓸 일도 있을거 같다는 생각이 듭니다. 앞으로 related_name을 작성할때는 가독성과 연관성을 고려해가면서 작성해야겠다는 반성을 하게되네요. 리뷰 감사드립니다.