django rest补丁,如何保存更新的数据?
对于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:
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
函数。对于部分更新,还应该在序列化程序中添加kwargpartial=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
函数。对于部分更新,还应该在序列化程序中添加kwargpartial=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 )
你能在问题中添加序列化程序吗