2013-08-28 9 views
6

Sto eseguendo una convalida personalizzata a livello di campo nel mio serializzatore che richiede di fare riferimento a un altro campo.Framework di Django REST: Qual è veramente la differenza tra validate_ <fieldname> e convalidare?

Guardando gli esempi nello Validation documentation, non sono chiaro se dovrei usare validate_<fieldname> o validate. Sembra che entrambi abbiano il dizionario attrs, quindi da validate_<fieldname> posso facilmente fare riferimento a un altro campo come da validate (anche se la descrizione per validate indica che dovresti usarla per accedere a più campi). Allora perché ci sono entrambe le opzioni? Nel mio caso, quale opzione è corretta da usare?

risposta

17

Il sollevamento di un ValidationError all'interno di validate_<foo>() genera un errore di campo.

{'foo': ['Not a fooish value.']} 

Crescere un ValidationError all'interno validate() si tradurrà in errore non campo.

{'non_field_errors': ['Foo and bar are not compatible.']} 

Allora, perché ci sono entrambe le opzioni?

In parte a causa di quanto sopra, e in parte perché l'API di serializzazione rispecchia l'API di forma di Django ove possibile. Ci sono alcune differenze dove necessario, ma lo stile validate e è simile.

Nel mio caso, quale opzione è corretta da utilizzare?

È una chiamata di giudizio, in base alla quale il messaggio di errore è più appropriato.

+2

Neil - 'attrs' è l'input per il serializzatore come dizionario prima che sia stato convalidato e ripristinato in un'istanza di oggetto completa. In cima alla mia testa, immagino che potrebbe avere a che fare con alcuni degli input già convalidati nel momento in cui si sta accedendo ad esso. –

+0

Grazie a @Tom. C'è un modo per passare parametri aggiuntivi a validate_foo, come ad esempio l'id dell'oggetto? – Neil

+1

Se si tratta di un aggiornamento, 'self.object' contiene un riferimento all'istanza. –

Problemi correlati