2012-04-01 8 views
11

Sto cercando di impostare gli errori di campo in una forma pulita() e attualmente sto facendo:Django - forma pulita() e sul campo gli errori

self._errors['address'] = self._errors.get('address', ErrorList()) 
self._errors['address'].append(_(u'Please specify an address.')) 

c'è un metodo migliore e, se possibile, più breve per facendo questo?

+0

uso self.errors invece, restituisce _errors e non vuole essere privato – radtek

risposta

5
  1. Il modo standard è raise ValidationError(message).
  2. Sposta la convalida specifica del campo ai metodi clean_<fieldname>(), clean_address nel tuo caso. ValidationError generato in tale metodo aggiungerà un messaggio di errore a un campo specifico. Uno generato da clean() sarà attribuito al modello in generale.
+1

Attualmente sto usando 'clean()' per convalidare certe cose relative a più campi - Sono abbastanza nuovo a Django e Python in generale e mi chiedevo se ci fosse un modo migliore/più breve per controllare/creare/accodare errori specifici del campo. – RS7

+0

Aggiunto l'articolo n. 3, forse descrive ciò di cui hai bisogno. Tratto dall'implementazione interna di django di 'clean_fields' –

+0

Puoi espandere il tuo suggerimento # 3? Non funziona per me. Posso vedere che la classe ['ValidationError'] (https://code.djangoproject.com/browser/django/trunk/django/core/exceptions.py#L41) accetta un dizionario di errori del genere, ma [' Forms ._clean_form'] (https://code.djangoproject.com/browser/django/trunk/django/forms/forms.py#L297) in realtà non ne fa uso. –

7

Forse questo ti aiuterà. In genere è preferibile eseguire l'override pulito e all'interno della funzione è possibile effettuare le seguenti operazioni

Se si desidera aumentare la forma di errori specifici che si potrebbero fare.

self._errors["field"] = ErrorList([u"Error"]) 

questo è assicurarsi di ottenere la classe di errore

se si dispone di un errore non campo si potrebbe semplice sollevare un errore di convalida in questo modo

raise forms.ValidationError(_("Error")) 

Spero che questo aiuti.