2015-12-10 9 views

risposta

9

Se si desidera creare un campo personalizzato, è necessario creare una sottoclasse campo e poi ignorare uno dei due o entrambi i metodi .to_representation() e .to_internal_value(). Questi due metodi vengono utilizzati per convertire tra il tipo di dati iniziale e un tipo di dati serializzabile primitivo. I tipi di dati primitivi saranno tipicamente di numero, stringa, booleano, data/ora/datetime o Nessuno. Possono anche essere qualsiasi elenco o dizionario come oggetto che contiene solo altri oggetti primitivi. Altri tipi potrebbero essere supportati, a seconda del renderer che si sta utilizzando.

Il metodo .to_representation() viene chiamato per convertire il tipo di dati iniziale in un tipo di dati serializzabile primitivo.

Il metodo to_internal_value() viene chiamato per ripristinare un tipo di dati primitivo nella sua rappresentazione python interna. Questo metodo dovrebbe generare un errore serializers.ValidationError se i dati non sono validi.

Si noti che la classe WritableField presente nella versione 2.x non esiste più. È necessario eseguire la sottoclasse Field e sovrascrivere to_internal_value() se il campo supporta l'immissione dei dati.

Rif:

  1. http://www.django-rest-framework.org/api-guide/fields/#custom-fields
  2. https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py#L417