12

Używam djangorestframework, a ktoś wysyła żądanie PUT do .../peoplelist/2/markAsSeen, podając tylko identyfikator obiektu Person w adresie URL. Pobieram obiekt Person (w tym przypadku 2), a następnie po prostu zmienię pole pobranego obiektu osoby has_been_viewed na True. Zaktualizowany obiekt Person jest następnie przekształcany do postaci szeregowej i zwracany z powrotem do klienta.Błędy serializera djangorestframework: {u'non_field_errors: [Dostarczone dane wejściowe]]}

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

błędy serializer jest {u'non_field_errors': [u'No input provided']} serializer.data wygląda dobrze mi

class PersonSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Person 
     fields = ('id',) 

Odpowiedz

17

Ty zapewniając wystąpienie osoba być aktualizowany przez serializatora, ale nie ma danych, które towarzyszą zaktualizować tę instancję.

Jeśli chcesz deserializowania niektóre dane żądania aktualizacji tego wystąpienia z potem tracisz na data argumentu, na przykład:

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

Jednak to brzmi jak punkt końcowy chcesz rzeczywistości nie spodziewać się poradzić sobie z dowolnymi danymi wejściowymi (jest to po prostu pusty wniosek PUT)? W takim przypadku nie chcesz/musisz używać serializatora w ogóle.

+4

Dzięki Tom. Nie zdawałem sobie sprawy, że weryfikacja serializatora służy do deserializacji onyl. Myślałem, że za każdym razem, gdy wywołasz serializer (do czytania lub pisania), musisz sprawdzić, czy proces się powiódł. – user798719