djangorestframework序列化程序错误:{u'non_field_errors':[u'No input provided']}

use*_*719 13 python django serialization django-models django-rest-framework

我正在使用djangorestframework,有人向a发出PUT请求.../peoplelist/2/markAsSeen,只在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,)
Run Code Online (Sandbox Code Playgroud)

序列化程序错误{u'non_field_errors': [u'No input provided']} serializer.data对我来说很好看

class PersonSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person
        fields = ('id',)
Run Code Online (Sandbox Code Playgroud)

Tom*_*tie 19

您提供了一个由序列化程序更新的人员实例,但没有随附数据来更新该实例.

如果要反序列化某些请求数据以更新该实例,那么您将错过该data参数,例如:

PersonSerializer(person, data=request.DATA, partial=True)
Run Code Online (Sandbox Code Playgroud)

然而,这听起来像你想要的端点实际上并不期望处理任何输入数据(它只是一个空的PUT请求你正在做什么?)在这种情况下你根本不需要/需要使用序列化器.

  • 谢谢汤姆.我没有意识到序列化器验证是针对反序列化的onyl.我曾想过,无论何时调用序列化程序(用于读取或写入),您都需要进行验证以确保过程正常. (4认同)