Ho un modulo Django che aggiungerà una voce a un database con un vincolo univoco su una delle colonne. Se l'invio avviene per tentare la creazione di un duplicato, ottengo un valore django.db.utls.IntegrityError
affermando che ho violato il vincolo univoco (per fortuna).Aggiunge esternamente errori di modulo in Django
Durante l'elaborazione di forme Django, ci sono un certo numero di modi per validare:
- Override classe form
clean
metodo - Override classe form
clean_<field>
metodo
Se il clear_<field>
metodo solleva un django.forms.ValidationError
, il messaggio di errore verrà aggiunto a un elenco nel dizionario _errors
sotto il nome del campo. Quando si utilizza il metodo clean
, gli errori devono essere manually inserted nel codice _errors
.
Ora, i clean
e clean_<field>
metodi non suonano come un bel posto per inserire il codice che ha effetti collaterali, e temo che il controllo in questo momento se il valore è unico non garantisce non voglio entrare IntegrityError
s . Preferirei effettivamente provare e creare la riga nel database e segnalare un errore di modulo quando viene violato un vincolo.
Il mio problema principale è che i moduli espongono una proprietà pubblica errors
che è di sola lettura. Pertanto, dovrei, secondo i documenti, aggiungere un metodo nel mio modulo che faccia tutto il lavoro, provare ad inserire nel database e registrare un errore quando viene sollevato uno IntegrityError
. Poiché l'azione che elabora il modulo dopo la convalida richiede molti altri dati, non voglio inserire il codice all'interno della classe del modulo stesso.
C'è qualche altro modo (documentato o meno) per aggiungere una voce nel errors
dict al di fuori della classe, o dovrei semplicemente accedere alla variabile "privata" _errors
e accontentarla? So che sembra una violazione dell'OOP, ma creare un metodo extra solo per accedere a questa variabile "privata" non mi sembra come se proteggesse qualcuno da qualsiasi cosa.
Edit: Sembra come qualcun altro ha già sollevato a similar question, ma sembra le risposte hanno indicato inserimento manuale in _errors
...
possibile duplicato di [. Aggiungere errori ad errori di forma Django \ _ \ _ all \ _ \ _] (http: // stackoverflow.com/questions/2235146/adding-errors-to-django-form-errors-all) – Louis