【问题标题】:How to do a PUT (partial update) using generics in Django-Rest-Framework?如何在 Django-Rest-Framework 中使用泛型进行 PUT(部分更新)?
【发布时间】:2015-06-27 23:19:10
【问题描述】:
如果我有一个像这样的类视图,
class MovieDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Movie.objects.all()
serializer_class = MovieSerializer
如何让序列化接受部分更新?当前位置 Put 将删除所述对象的现有数据。
【问题讨论】:
标签:
django
django-rest-framework
【解决方案1】:
如果您使用 DRF 路由,请使用 PATCH 方法而不是 PUT。
如果你自己写 urls 配置,
将其发送到 RetrieveUpdateDestroyAPIView 视图中的 partial_update 方法。
如果您自己获得序列化,
将partial=True 传递给您的序列化器
partial = kwargs.pop('partial', False)
serializer = self.get_serializer(instance, data=request.data, partial=partial)
【解决方案2】:
或者您可以将 get_serializer() 方法覆盖为:
def get_serializer(self, *args, **kwargs):
kwargs['partial'] = True
return super(MovieDetail, self).get_serializer(*args, **kwargs)
当前端人员使用AngularJS的ngResource调用你的API时特别有用,默认情况下只支持'put'而不是'patch'。
希望对你有帮助。