django rest补丁,如何保存更新的数据?

django rest补丁,如何保存更新的数据?,django,django-rest-framework,Django,Django Rest Framework,对于REST补丁,我想更新模型中已经存在的一些值,并将其保存回去。然而,我显然遗漏了一些步骤: 查找要更新的项目 更新值 省省吧 看起来很简单: def patch( self, request, serialnumber, format = None ): try: r = Rack.objects.get( serialNumber = serialnumber ) except Rack.DoesNotExist:

对于REST补丁,我想更新模型中已经存在的一些值,并将其保存回去。然而,我显然遗漏了一些步骤:

  • 查找要更新的项目
  • 更新值
  • 省省吧
  • 看起来很简单:

    def patch( self, request, serialnumber, format = None ):
            try:
                r = Rack.objects.get( serialNumber = serialnumber )
            except Rack.DoesNotExist:
                data = { 'error' : 'item not found' }
                return Response( data, status = status.HTTP_404_NOT_FOUND )
    
            s = RackSerializer( r )
    
            token = "New value for token"
    
            s.save( token = token, serialNumber = serialnumber )
    
            data = { 'serialNumber' : serialnumber, 'token' : token }
            return Response( data, status = status.HTTP_200_OK )
    
    这将给出“断言错误:您必须在调用“.save()”之前调用“.isvalid()”

    如果我添加s.is\u valid()调用,我会得到
    “Cannot call”.is\u valid()”,因为实例化序列化程序实例时没有传递“data=”关键字参数。“


    有人能告诉我如何解开这个结吗?

    您必须将数据传递给序列化程序才能保存它。为此,您必须在
    保存之前调用
    is\u valid
    函数。对于部分更新,还应该在序列化程序中添加kwarg
    partial=True

    def patch( self, request, serialnumber, format = None ):
        try:
            r = Rack.objects.get( serialNumber = serialnumber )
        except Rack.DoesNotExist:
            data = { 'error' : 'item not found' }
            return Response( data, status = status.HTTP_404_NOT_FOUND )
    
        token = "New value for token"
        data = { 'serialNumber' : serialnumber, 'token' : token }
        s = RackSerializer(r, data=data, partial=True)
        s.is_valid(raise_exception=True)
        s.save()
        return Response( data, status = status.HTTP_200_OK )
    

    为了保存数据,必须将数据传递给序列化程序。为此,您必须在
    保存之前调用
    is\u valid
    函数。对于部分更新,还应该在序列化程序中添加kwarg
    partial=True

    def patch( self, request, serialnumber, format = None ):
        try:
            r = Rack.objects.get( serialNumber = serialnumber )
        except Rack.DoesNotExist:
            data = { 'error' : 'item not found' }
            return Response( data, status = status.HTTP_404_NOT_FOUND )
    
        token = "New value for token"
        data = { 'serialNumber' : serialnumber, 'token' : token }
        s = RackSerializer(r, data=data, partial=True)
        s.is_valid(raise_exception=True)
        s.save()
        return Response( data, status = status.HTTP_200_OK )
    

    你能在问题中添加序列化程序吗