【问题标题】:Django Rest UpdateDjango 休息更新
【发布时间】:2014-09-26 19:04:53
【问题描述】:

我正在尝试通过 Django Rest PUT 方法更新数据。

class TableView(generics.ListAPIView, generics.UpdateAPIView, generics.CreateAPIView):

    serializer_class = TableSerializer

    def update(self, request, *args, **kwargs):

        if kwargs.__len__() != 0:
            tableid = kwargs['id']
            mycol = request.DATA['col']
            Table.objects.filter(id=tableid).update(col=mycol)

所以,这可行,但数据由模型 Table.object 更新。有没有通用的方法来更新数据?我的意思是,如果我 PUT col1 和 col2 数据,它会更新它们.. 如果我只发送 col1,它只会更新它..

【问题讨论】:

    标签: python django rest service updatemodel


    【解决方案1】:

    是的,你可以使用这样的东西

     def update(self, instance,validated_data):
    
    
    
    
    
        # The instance is the already saved object
        instance.col=validated_data['col']
        instance.col2=validated_data['col2']
        instance.save()
    
    
        return instance
    

    查看此链接以获取 .update() 方法 http://www.django-rest-framework.org/api-guide/serializers/#writable-nested-representations

    【讨论】:

      【解决方案2】:

      这就是 PATCH 请求为您做的事情。但是,在某些情况下,不支持 PATCH(例如某些旧版本的 Lighttpd),或者您可能出于遗留原因需要使用 PUT。

      好在 PATCH 和 PUT 请求在 Django REST Framework 中几乎相同。它们共享大部分代码,主要区别在于 PATCH 请求将参数 partial 设置为 True。

      您可以尝试做的是,在您的 update() 方法中手动设置部分标志并将其传递给您的序列化程序,例如:

      def update(self, request, *args, **kwargs):
          partial = True
          instance = self.get_object()
          serializer = self.get_serializer(instance, data=request.data, partial=partial)
      

      这应该只更新请求中作为参数传递的部分。

      通常,PATCH 请求会调用 ModelViewSet 中的 perform_update() 函数,只需将部分标志设置为 true,然后再调用 update() 函数。来源:https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py#L76

      来自 Django REST 框架页面的一些关于更新 mixin 的信息:http://www.django-rest-framework.org/api-guide/generic-views/#updatemodelmixin

      【讨论】:

        猜你喜欢
        • 2018-10-12
        • 2016-09-11
        • 1970-01-01
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 1970-01-01
        • 2015-06-30
        • 1970-01-01
        相关资源
        最近更新 更多