How to do a PUT (partial update) using generics in

2019-02-19 05:12发布

If I have a class view that looks like this,

class MovieDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Movie.objects.all()
    serializer_class = MovieSerializer

how do I make the serialize accept partial updates? currently where it stands Put will erase an existing data for said object.

2条回答
看我几分像从前
2楼-- · 2019-02-19 05:54

Or you can just overwrite the get_serializer() method as:

  def get_serializer(self, *args, **kwargs):
        kwargs['partial'] = True
        return super(MovieDetail, self).get_serializer(*args, **kwargs)

It is especially useful when the front-end guy use the ngResource of the AngularJS to call your API, which only supports the 'put' instead of the 'patch' by default.

Hope it helps.

查看更多
三岁会撩人
3楼-- · 2019-02-19 05:56

If you are using the DRF route, use PATCH method instead of PUT.

if you write the urls configuration by yourself, dispatch it to partial_update method in your RetrieveUpdateDestroyAPIView view.

If you get the serialize by yourself, pass the partial=True to your Serializer

partial = kwargs.pop('partial', False)
serializer = self.get_serializer(instance, data=request.data, partial=partial)
查看更多
登录 后发表回答