Очищенные_данные формы регистрации
Привет,
У меня есть пользовательская форма регистрации, и я использую django localflavors в качестве валидации для двух полей. Я создал пользовательскую валидацию и она работает нормально, но когда я возвращаю очищенные данные, форма пропускает валидацию, которая поставляется с полями local flavor.
В общем, когда я определяю свою собственную функцию clean_data для валидации, она переопределяет валидацию django locolaflavors.
Форма
class CustomSignupForm(SignupForm):
first_name = forms.CharField(max_length=30, label='First Name', required=True)
last_name = forms.CharField(max_length=30, label='Last Name', required=True)
sec_id = SEPersonalIdentityNumberField(max_length=30, label='Pid', required=True)
org_nr = SEOrganisationNumberField(max_length=30, label='Org_nr', required=True)
telephone = forms.CharField(max_length=20, label='Telephone', required=True)
address = forms.CharField(max_length=30, label='Address', required=True)
city = forms.CharField(max_length=30, label='City', required=True)
zip_code = forms.CharField(max_length=30, label='Zip_code', required=True)
state = forms.ChoiceField(choices=COUNTY_CHOICES,label='State', required=True)
country = forms.ChoiceField(choices=COUNTRY_LIST,label='Country', required=True)
Моя пользовательская валидация
def clean(self):
"""
Clean the form
"""
cleaned_data = super().clean()
secid= self.cleaned_data["sec_id"]
if User.objects.filter(profile__sec_id=sec_id).exists():
self.add_error(
'sec_id',
_('If you have a account please reset your password'),
)
return cleaned_data
Создание очищенных данных, после того как форма использует is_valid, так что перед использованием clean, необходимо использовать is_valid
Я решил проблему, не переименовывая стандартный метод clean(). Вместо этого я переименовал свою пользовательскую валидацию и пользователь поднимает ValidationError, и все работает:
def clean_secid(self):
sec_id= self.cleaned_data['sec_id']
if User.objects.filter(profile__sec_id=sec_id).exists():
raise ValidationError("If you have a account please reset your password")
return sec_id