LINUX.ORG.RU

Изменение атрибута в форме из модели

 ,


0

2

Я использую форму из модели:

class UserForm(forms.ModelForm):
    class Meta:
        model = models.User
        fields = ('username', 'first_name', 'last_name', 'email', 'password')

В модели User email опционален. Однако я хочу, чтобы он был обязателен. Каким образом я могу изменить атрибут required поля email на True, дабы форма корректно отрабатывала проверку всех полей?


def __init__(self, *args, **kwargs):
    super(UserForm, self).__init__(*args, **kwargs)
    self.fields['email'].required = True

Либо филд переопредели и прокинь аргументом.

doraneko
()

Либо форму обычную, а не ModelForm, используй.

ei-grad ★★★★★
()

Я немного модифицировала свою форму:

class CustomUserCreationForm(UserCreationForm):

    class Meta:
        model = models.User
        fields = ('username', 'email', 'password1', 'password2')

    def __init__(self, *args, **kwargs):
        super(CustomUserCreationForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True
        self.fields['password1'].min_length = 6
        self.fields['password2'].min_length = 6

Сейчас все проверки срабатывают корректно, за исключением min_length у паролей. В чем может быть проблема?

totik
() автор топика
Ответ на: комментарий от totik

Нашла ответ: необходимо установить валидатор. Конечный вариант:

class CustomUserCreationForm(UserCreationForm):

    class Meta:
        model = models.User
        fields = ('username', 'email', 'password1', 'password2')

    def __init__(self, *args, **kwargs):
        super(CustomUserCreationForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True

        password_min_length = 6

        validators = [v for v in self.fields['password1'].validators if not isinstance(v, MinLengthValidator)]
        validators.append(MinLengthValidator(password_min_length))
        self.fields['password1'].validators = validators

        validators = [v for v in self.fields['password2'].validators if not isinstance(v, MinLengthValidator)]
        validators.append(MinLengthValidator(password_min_length))
        self.fields['password2'].validators = validators

totik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.