like 기능을 위한 overriding 문의
322
9 asked
안녕하세요 강사님!
강의 재미있게 보면서 공부하고 있습니다.
PostLikeAPIView에 대한 overriding 관련 문의드립니다.
class PostLikeAPIView(UpdateAPIView):
queryset = Post.objects.all()
serializer_class = PostLikeSerializer
# PATCH method
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
# data = instance.like + 1
data = {'like': instance.like + 1}
serializer = self.get_serializer(instance, data=data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
if getattr(instance, '_prefetched_objects_cache', None):
# If 'prefetch_related' has been applied to a queryset, we need to
# forcibly invalidate the prefetch cache on the instance.
instance._prefetched_objects_cache = {}
# return Response(serializer.data)
return Response(data['like'])강의 내용 중에 위 괕이 오버라이딩 하는 로직이 있었는데요.
# views.py
class PostLikeAPIView(UpdateAPIView):
queryset = Post.objects.all()
serializer_class = PostLikeSerializer
def patch(self, request, *args, **kwargs):
instance = self.get_object()
request.data['like'] = instance.like + 1
super().patch(request, *args, **kwargs)
return Response(request.data['like'])
# serializers.py
class PostLikeSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ['like']
이런 식으로 해도 같은 결과를 얻을 수 있을 수 있었습니다.
이렇게한 의도는 update method를 overriding 하는 거보다
patch method를 overriding 할 때 비즈니스 로직 코드가 더 짧으니
실수가 적지 않을까 해서 입니다.
제가 적은대로 사용하는 것도 유효한지, 어떤 단점이 있을지 잘 생각이 안나서 문의드립니다.
강의 감사하게 보고있습니다.
항상 건강하시길 바라겠습니다^^
Answer 1
1
안녕하세요. 독자님.
코드를 간결하고 실수가 적게하는 방법을 찾는 것은 좋은 시도이고, 충분히 고려해볼만한 질문이네요.
그런데 super() 메소드를 호출하고 그 결과를 활용 못하는 단점이 있군요. super().patch(~)의 리턴값이 있으므로 이를 활용하는게 더 좋은 코드라고 생각합니다. (아래 2번 예시)
(1) super().patch(request, *args, **kwargs)
(2) result = super().patch(request, *args, **kwargs)그리고 (1)번도 역시 결국은 update() 메소드를 호출하고 거기서 Response() 객체를 만들고 있으므로, 독자님의 코드는 Response() 객체를 중복으로 만들고 있습니다.
그래서 저는 update() 메소드를 오버라이딩하는 것을 추천하고 싶네요.
도움이 되었는지요?
블로그 첫 화면이 안 나옵니다.
0
317
3
INSTALLED_APPS 순서
0
246
1
vscode 실행안됨
0
667
3
django venv activate 하고 나서 vue 서버도 실행 해야 하나요?
0
367
2
더 공부할게있을까요
0
369
1
용어에 대해 문의 드립니다.
0
283
2
코드 최적화 과정
0
364
1
유저 1명이 1개의 게시글에 좋아요를 누를 경우
0
356
1
프로잭트를 생성하고 runserver하면 ModuleNotFoundError: No module named 발생해요
0
894
4
GET Method 에서 왜 Like 수를 증가시키는지 궁금합니다.
0
376
1
CSRF Token에 대한 질문입니다.
0
609
1
ModuleNotFoundError: No module named 'rest_framework django' 오류
0
3037
1
앱을 구성할 때 api 앱과 blog 앱을 나누어서 구성하는 이유가 궁금합니다ㅜ
1
472
2
to_representation() 오버라이딩 질문입니다.
0
496
3
공부 순서에 관해 질문드립니다.
0
360
1
CateTagAPIView에서 get 메소드
1
309
2
깃헙 페이지를 보고싶어요
0
230
1
디버거 관련 질문입니다.
0
277
3
가장 마지막강의 (Generic View -> ViewSet migration) 질문입니다.
0
223
1
PostCommentListAPIView(게시물 댓글 조회 api) 관련 질문
0
211
1
댓글 보기 및 삭제 api
0
280
1
post, comment crud 질문
0
228
4
CateTagSerializer 질문입니다!
3
336
3
The serializer field might be named incorrectly and not match any attribute or key on the `User` instance.
0
840
1

