Динамически изменять Django поля формы - PullRequest
1 голос
/ 06 мая 2020

В форме настраиваемой регистрации django у меня есть ChoiceField, см. Код ниже, но я хочу изменить поля в соответствии с параметрами ChoiceField. например, если ChoiceField выбран как Student, тогда я хочу скрыть «поле электронной почты» или могу добавить дополнительное поле. Я знаю, что могу сделать это с помощью JavaScript, но хочу изменить форму.

class Signup_Form(UserCreationForm):
 def __init__(self, *args, **kwargs):
    super(Signup_Form, self).__init__(*args, **kwargs)
    # below changing on the fields of this form.
    self.fields['first_name'].label = "First Name"
    self.fields['last_name'].label = "Last Name"
    self.fields['email'].label = "Email"

 SIGNUP_USERS_TYPES = (
    ('Student', 'Student',),
    ('Admin', 'Admin',),)

 user_type = forms.ChoiceField(choices = SIGNUP_USERS_TYPES, required=True, label="Sign-up as :",)

 class Meta:
    model = User
    fields = ['user_type', 'first_name', 'last_name','email', 'username', 'password1', 'password2' ]

1 Ответ

0 голосов
/ 19 августа 2020

В вашем классе шаблона у вас может быть следующее Javascript для достижения желаемого поведения.

Добавьте поле email в качестве условного поля и отобразите / скройте поле электронной почты на основе значения в вашем user_type поле.

<script>
    let conditional_fields = $("#id_email");
    if ($("#id_user_type").val() === 'Student') {
        conditional_fields.parent().parent().hide();
    }
    $("#id_user_type").change(function () {
        if ($(this).prop('value') === 'Student') {
            conditional_fields.parent().parent().hide();
        } else {
            conditional_fields.parent().parent().show();
        }
    });
</script>
...