djangorestframework 序列化程序错误:u'non_field_errors': [u'No input provided']
Posted
技术标签:
【中文标题】djangorestframework 序列化程序错误:u\'non_field_errors\': [u\'No input provided\']【英文标题】:djangorestframework serializer errors: u'non_field_errors': [u'No input provided']djangorestframework 序列化程序错误:u'non_field_errors': [u'No input provided'] 【发布时间】:2014-01-04 21:18:44 【问题描述】:我正在使用 djangorestframework,有人向.../peoplelist/2/markAsSeen
发出 PUT 请求,只在 URL 中传入一个 Person 对象的 id。我获取 Person 对象(在本例中为 2),然后简单地将获取的 Person 对象的字段 has_been_viewed
更改为 True。然后将更新的 Person 对象序列化并返回给客户端。
if request.method == 'PUT':
serializer = PersonSerializer(person,partial=True)#person is a valid object here
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
else:
return Response(serializer.errors,)
序列化错误是u'non_field_errors': [u'No input provided']
serializer.data
我觉得很好
class PersonSerializer(serializers.ModelSerializer):
class Meta:
model = Person
fields = ('id',)
【问题讨论】:
【参考方案1】:您提供了一个要由序列化程序更新的人员实例,但没有用于更新该实例的随附数据。
如果您想反序列化一些请求数据以更新该实例,那么您缺少 data
参数,例如:
PersonSerializer(person, data=request.DATA, partial=True)
但是,听起来您想要的端点实际上并不希望处理任何输入数据(它只是一个空的 PUT
请求,您做对了吗?)在这种情况下,您不希望/不需要完全使用序列化程序。
【讨论】:
谢谢汤姆。我没有意识到序列化程序验证是针对反序列化的。我曾认为,每当您调用序列化程序(用于读取或写入)时,您都需要验证以确保过程正常。以上是关于djangorestframework 序列化程序错误:u'non_field_errors': [u'No input provided']的主要内容,如果未能解决你的问题,请参考以下文章
djangorestframework 序列化程序错误:u'non_field_errors': [u'No input provided']
在反向关系上添加序列化程序 - Django Rest Framework
如何在 Django Rest Framework 中过滤嵌套的序列化程序?
Django Rest Framework:序列化程序响应错误