0
0 комментариев

помогите пожалуйста исправить валидацию

есть форма с полями: фамилия, имя, отчество, логин, ник, что показывать. вешаю валидацию на поле «что показывать». что показывать это выпадающий список типа select.

работать должно следующим образом. например пользователь выбирает из выпадающего списка «фамилия» и если при этом поле «фамилия заполнено», то форма отправляется. если не заполнено — выводится сообщение об ошибке

models.py:
class UserProfile(User):
CHOICES_name_label = (
(‘0’, ‘nick’, ),
(‘1’, ‘login’,),
(‘2’, ‘family’, ),
(‘3’, ‘family name1 name2’, ),
)

    family = models.CharField(
        'Фамилия',
        max_length=30,
        blank=True,
    )
    name1 = models.CharField(
        'Имя',
        max_length=30,
        blank=True,
    )
    name2 = models.CharField(
        'Отчество',
        max_length=30,
        blank=True,
    )
    nickname = models.CharField(
        'Ник',
        max_length=30,
        blank=True,
    )
    name_label = models.CharField(
        'Показывать на странице имя как',
        max_length=30,
        choices=CHOICES_name_label,
        blank=False,
        default=1,
    )

forms.py:

class PersonalDataForm(forms.ModelForm):
 
    def clean_name_label(self):
        cleaned_data = self.cleaned_data
        name_label = cleaned_data.get("name_label").strip()
        nickname = cleaned_data.get("nickname").strip()
        family = cleaned_data.get("family").strip()
        name1 = cleaned_data.get("name1").strip()
        name2 = cleaned_data.get("name2").strip()
 
        if name_label == '0' and not nickname:
            raise forms.ValidationError("0")
 
        if name_label == '2' and not family:
            raise forms.ValidationError("2")
 
        if name_label == '3' and not family and not name1 and not name2:
            raise forms.ValidationError("3")
 
        return name_label

проблема в том, что срабатывают условия валидации:

    if name_label == '0' and not nickname:
        raise forms.ValidationError("0")
 
    if name_label == '2' and not family:
        raise forms.ValidationError("2")

и не срабатывает условие валидации:

    if name_label == '3' and not family and not name1 and not name2:
        raise forms.ValidationError("3")


Добавить комментарий