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:序列化程序响应错误

Django REST Framework:嵌套序列化程序未出现

DjangoRestFramework之序列化组件