【问题标题】: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'。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2020-11-24
        • 2017-04-27
        • 2016-05-03
        • 2020-04-12
        • 1970-01-01
        • 2017-06-24
        • 2017-04-14
        • 2015-05-23
        • 1970-01-01
        相关资源
        最近更新 更多