如何在Django-Rest-Framework中使用泛型进行PUT(部分更新)?

时间:2015-04-21 01:32:01

标签: django django-rest-framework

如果我有类似的课程视图,

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

如何让序列化接受部分更新?目前它所处的位置Put将擦除所述对象的现有数据。

2 个答案:

答案 0 :(得分:5)

如果您使用的是DRF路线,请使用PATCH方法代替PUT

如果您自己编写网址配置, 在partial_update视图中将其发送到RetrieveUpdateDestroyAPIView方法。

如果您自己进行序列化, 将partial=True传递给您的Serializer

partial = kwargs.pop('partial', False)
serializer = self.get_serializer(instance, data=request.data, partial=partial)

答案 1 :(得分:3)

或者您可以将get_serializer()方法覆盖为:

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

当前端人员使用AngularJS的ngResource来调用你的API时,它特别有用,它只支持' put'而不是'补丁'默认情况下。

希望它有所帮助。