Django ValueError Данное имя пользователя должно быть установлено из формы self в переопределенном методе сохранения формы
Я работаю над проектом django simple 3.2.9. Когда я пытаюсь переопределить метод сохранения моей формы, я получаю следующую ошибку:
ValueError Данное имя пользователя должно быть установлено из формы self
Это довольно раздражает, потому что если я не переопределяю и вызываю функцию сохранения из представления, она работает просто отлично, но если я переопределяю метод, кажется, что он не может получить атрибуты self из формы, хотя он может сделать это для других методов валидации в классе.
Это мой класс RegisterForm.
class RegisterForm(forms.Form):
username=forms.CharField(
required=True,
min_length=4,max_length=50,
widget=TextInput(attrs={
'class':'form-control'
})
)
email=forms.EmailField(
required=True,
min_length=4,max_length=50,
widget=TextInput(attrs={
'class':'form-control'
})
)
pwd=forms.CharField(
required=True,
min_length=4,max_length=50,
widget=PasswordInput(attrs={
'class':'form-control'
})
)
pwdr=forms.CharField(
required=True,
min_length=4,max_length=50,
widget=PasswordInput(attrs={
'class':'form-control'
})
)
def clean_username(self):
username=self.cleaned_data.get('username')
if User.objects.filter(username=username).exists():
raise forms.ValidationError('Ese nombre de usuario ya se encuentra en uso')
return username
def clean_email(self):
email=self.cleaned_data.get('email')
if User.objects.filter(email=email).exists():
raise forms.ValidationError('Ese email ya se encuentra en uso')
return email
def clean(self):
cleaned_data=super().clean()
if cleaned_data.get('pwd')!= cleaned_data.get('pwdr'):
self.add_error('pwdr','Las contraseñas no coinciden')
return redirect('register')
return redirect('home')
def save(self):
username=self.cleaned_data.get('username')
email=self.cleaned_data.get('email')
pwd=self.cleaned_data.get('pwd')
return User.objects.create_user(
username,
email,
pwd
)
Это содержимое self из print(self) внутри метода save
label for="id_username">Имя пользователя:<input
type="text" name="username" value="vidalon" class="form-control" maxlength="50" minlength="4" required id="id_username">
. Email: Pwd: Pwdr:
Заранее спасибо
Я получил это из django docs
где мы можем прочитать следующее:
Обратите внимание, что Form.add_error() автоматически удаляет соответствующее поле из clean_data.