Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django REST Frameworkに再挑戦 その15 Update & Destroy Mixins

概要

Django REST Frameworkに再挑戦 その15 Update & Destroy Mixins

参考サイト

www.django-rest-framework.org

www.codingforentrepreneurs.com

Update & Destroy Mixins

  • Mixinの公式サイトの解説を確認する。

Generic views - Django REST framework

  • CommentEditAPIViewを定義する。
class CommentEditAPIView(RetrieveAPIView):
    queryset = Comment.objects.filter(id__gte=0)#greater than
    serializer_class = CommentDetailSerializer
  • urls.pyにeditviewを追記する。
    url(r'^(?P<pk>\d+)/edit/$', CommentEditAPIView.as_view(), name='edit'),
  • /api/comments/5/edit/にアクセスするとdetailviewと同じviewが表示される。

  • comments/api/views.pyに、from rest_framework.mixins import DestroyModelMixin, UpdateModelMixinを追記する。

  • DestroyModelMixin, UpdateModelMixinを継承してコードを追記する。これで、editと、deleteができるようになる。

class CommentEditAPIView(DestroyModelMixin, UpdateModelMixin, RetrieveAPIView):
    queryset = Comment.objects.filter(id__gte=0)#greater than
    serializer_class = CommentDetailSerializer

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)#updatemodelmixinを継承することにより、利用できるメソッド

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)#destroymodelmixinを継承することにより、利用できるメソッド
  • EditView用のSerializerを作成する。
class CommentEditSerializer(ModelSerializer):
    class Meta:
        model = Comment
        fields = [
            'id',
            'content',
            'timestamp',
        ]
  • CommentEditAPIViewのserializer_classを、CommentEditSerializerに変更すれば完了!