12

Sto utilizzando djangorestframework e qualcuno effettua una richiesta PUT a un .../peoplelist/2/markAsSeen, inserendo solo l'id di un oggetto Person nell'URL. Prendo l'oggetto Person (2 in questo caso) e poi semplicemente cambio il campo dell'oggetto Person recuperato has_been_viewed su True. L'oggetto Person aggiornato deve quindi essere serializzato e restituito al client.errori serializzatore djangorestframework: {u'non_field_errors ': [u'No input fornito']}

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

errori serializzatore è {u'non_field_errors': [u'No input provided']} serializer.data guarda bene a me

class PersonSerializer(serializers.ModelSerializer): 

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

risposta

17

si sta fornendo un esempio persona che deve essere aggiornato dal serializzatore, ma non ci sono dati di accompagnamento per aggiornare tale istanza con.

Se si desidera deserializzare alcuni dati di richiesta di aggiornare tale istanza con l'allora vi state perdendo l'argomento data, ad esempio:

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

Tuttavia sembra che il punto finale che si desidera in realtà non si aspettano di gestire qualsiasi dato di input (è solo una richiesta PUT vuota che stai facendo bene?) Nel qual caso non vuoi/devi usare un serializzatore.

+4

Grazie Tom. Non mi sono reso conto che la convalida del serializzatore è per la deserializzazione. Avevo pensato che ogni volta che si invoca un serializzatore (per leggere o scrivere) è necessario convalidare per assicurarsi che il processo sia andato a posto. – user798719