/ / ModelForm findet beim Senden kein Feld - django, django-forms

ModelForm findet kein Feld beim Einreichen - django, django-forms

Ich habe derzeit dieses ModelForm zur Validierung einer neuen Benutzerregistrierung:

class RegistrationForm(forms.ModelForm):
email = forms.CharField(max_length=75, required=True)
password = forms.PasswordInput()
password_confirm = forms.PasswordInput()

class Meta:
model = User
fields = ["username", "email", "password"]

def clean(self):
if self.password != self.password_confirm:
self.add_error("password_confirm", "Passwords do not match.")

Der Benutzer muss sein Passwort bestätigen. Beim Absenden dieses Formulars erhalte ich folgende Fehlermeldung:

Wertefehler bei / register

"RegistrationForm" hat kein Feld "password_confirm".

Ich habe auch versucht, die self.cleaned_data zu verwenden, bekomme aber immer noch den gleichen Fehler.

Das Feldattribut kann nicht entfernt oder mit password_confirm versehen werden.

Wie würde man das Problem beheben?

Antworten:

2 für die Antwort № 1

password und password_confirm sind als Widgets definiert, nicht als Formularfelder.

Definieren Sie zwei CharFields und übergeben Sie das Widget-Argument:

class RegistrationForm(forms.ModelForm):
email = forms.CharField(max_length=75, required=True)
password = forms.CharField(widget=forms.PasswordInput)
password_confirm = forms.CharField(widget=forms.PasswordInput)

2 für die Antwort № 2

Sie müssen zuerst das Super Clean aufrufen, und dann sollten Sie die bereinigten Daten anstelle des Felds verwenden.

def clean(self):
cleaned_data = super(RegistrationForm, self).clean()
if cleaned_data.get("password") != cleaned_data.get("password_confirm"):
self.add_error("password_confirm", "Passwords do not match.")