12

私はdjangorestframeworkを使用していて、誰かが.../peoplelist/2/markAsSeenにPUTリクエストを行い、URLのPersonオブジェクトのIDだけを渡します。私はPersonオブジェクト(この場合は2)を取得し、フェッチされたPersonオブジェクトのフィールドhas_been_viewedを単にTrueに変更します。更新されたPersonオブジェクトは、次にシリアル化され、クライアントに返されます。djangorestframeworkシリアライザエラー:{u'non_field_errors ':[入力なし]'入力]

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',) 

答えて

17

私には正常に見えます。

あなたはたとえば、あなたがdata引数が欠落していると、そのインスタンスを更新するには、いくつかのリクエストデータをデシリアライズしたい場合:

PersonSerializer(person, data=request.DATA, partial=True) 

それはあなたが実際に期待していないしたいエンドポイントのように聞こえるがどの入力データでも処理できます(これは空のPUT要求ですか?)場合は、シリアライザをまったく使用したくない/必要としません。

+4

ありがとうございます。シリアライザの検証がデシリアライゼーションのためのものであることはわかりませんでした。シリアライザ(読み書き用)を呼び出すたびに、プロセスが正常に実行されたことを確認する必要があると思っていました。 – user798719

関連する問題