如果我有类似的课程视图,
class MovieDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
如何让序列化接受部分更新?目前它所处的位置Put将擦除所述对象的现有数据。
答案 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'而不是'补丁'默认情况下。
希望它有所帮助。