10cheon00 / drf-practice

0 stars 0 forks source link

Divided viewset to apiviews for custom update method. #20

Closed 10cheon00 closed 3 years ago

10cheon00 commented 3 years ago

Override update method to refresh last_modified_at field.

ModelSerializer로 바꿨다. 무슨 이유인지는 공부가 필요하다.

There needs to be a way of determining which views should be used for hyperlinking to model instances. By default hyperlinks are expected to correspond to a view name that matches the style '{model_name}-detail', and looks up the instance by a pk keyword argument.

이유는 model_name-detail의 name attribute를 가진 view를 찾아내려고 하기 때문이다.. 그러나 우리는 그냥 url로 요청이 들어오면 지정된 view를 이어줄 것이기 때문에 딱히 필요가 없다. url필드를 갖고 있다는 것은 좋지만 의미가 있나 싶다. 그래서 일단 ModelSerializer를 쓰기로...

update 함수를 오버라이딩했다. 상위 객체에서 어떻게 진행되나 살펴봤더니... https://github.com/encode/django-rest-framework/blob/98e56e0327596db352b35fa3b3dc8355dc9bd030/rest_framework/serializers.py#L968-L992 validated_data의 내용대로 instance.save()를 하더라. 우리가 하려는건 매우 간단하게 필드값만 갱신해주는 것이므로 validated_data의 값만 수정해 호출했다.

이렇게 만든 APIView를 쓰기 위해 ViewSet을 쪼갰다. 어쩔 수 없이 urlPattern을 더 작성했다. url parameter로 pk값을 받았고, lookup_field는 기본이 pk인데 왜 또 썼는지 모르겠다. authentication_classes 이런거는 default option에 있는것과 똑같아서 지웠다.