Aggiungo la convalida personalizzata ai miei moduli e campi personalizzati nella mia app Django. Mi piacerebbe essere in grado di modificare il valore di un campo quando si innesca un errore. Ad esempio, se si verifica un errore, il modulo deve essere nuovamente visualizzato con il valore del campo corretto da clean() e un messaggio di errore "I dati sono stati corretti di seguito. Fai di nuovo clic su Salva per confermare se queste modifiche sono OK"Modifica valore di un campo modulo Django durante la pulizia()
I Ho provato a restituire i dati modificati in clean_data [] come questo, ma non funziona. Visualizza l'errore correttamente, ma il valore del campo non viene aggiornato con l'HTML corretto quando il modulo viene nuovamente visualizzato.
class T34AtividadeForm(ModelForm):
def clean(self):
# Return cleaned html
error,html = fix_imgs(cleaned_data.get("a34_descricao"))
if error:
msg = u'Data has been corrected below. Click save again to confirm if these changes are OK';
self._errors['a34_descricao'] = ErrorList([msg])
# This doesn't work
cleaned_data["a34_descricao"] = html
# This doesn't work either
self.a34_descricao = html
return cleaned_data
Mi piacerebbe anche fare la stessa cosa con un campo, ma dal momento che gli errori sono attivati da eccezioni, non ottengo la possibilità di restituire il valore corretto. Come il metodo clean(), l'errore viene visualizzato correttamente, ma il valore non viene aggiornato.
class HTMLField(CharField):
widget = HTMLTextarea
def clean(self, value):
value = super(HTMLField,self).clean(value)
error,html = fix_imgs(value)
if error:
# This doesn't work
self.value = html
raise forms.ValidationError(u'Data has been corrected below. Click save again to confirm if these changes are OK.')
return html
Questo funziona, ma non è documentato e risulta brutto modificare direttamente l'oggetto QueryDict. Inoltre, ho dovuto scrivere una funzione di supporto per modificare QueryDict in sola lettura .... – user27478
Sì, ma non c'è un modo ufficiale per farlo. – user51463
@ user27478: puoi pubblicare la tua soluzione? – Don