12

我正在使用djangorestframework,並且有人向.../peoplelist/2/markAsSeen發出PUT請求,並在URL中傳入一個Person對象的ID。我獲取Person對象(在這種情況下爲2),然後將獲取的Person對象的字段has_been_viewed更改爲True。然後將更新的Person對象序列化並返回給客戶端。djangorestframework序列化錯誤:{u'non_field_errors':[u'No input provided']}

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

謝謝湯姆。我沒有意識到串行器驗證是用於反序列化onyl的。我曾經想過,無論何時您調用序列化程序(用於閱讀或寫入),都需要進行驗證以確保過程正常。 – user798719