Условно обязательные поля в формах? - PullRequest
0 голосов
/ 07 октября 2010

У меня есть две формы на одной странице. Если пользователь выбирает определенную опцию в одной форме, я хочу сделать опцию для другой формы больше не обязательной. Как я могу это сделать? Я не думаю, что могу поместить логику в метод clean, потому что это отдельные формы.

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Вы можете сделать это в представлении, если вы установите требуемый флаг в False перед вызовом is_valid во второй форме.

class MyForm1(forms.Form):
    other_field_required = forms.BooleanField(required=False)

class MyForm2(forms.Form):
    sometimes_required = forms.CharField(required=True)

def myview(request):
    form1 = MyForm1(request.POST)
    form2 = MyForm2(request.POST)

    if form1.is_valid():
        if not form1.cleaned_data['other_field_required']:
            form2.fields['sometimes_required'].required = False

    ...
        if form2.is_valid(): # form2 will be valid if other_field_required was False

Или вы можете добавить myform2 в качестве аргументак методу __init__ вашей первой формы, то вы можете поместить логику в метод clean.

class MyForm1(forms.Form):
    other_field_required = forms.BooleanField(required=False)

    def __init__(myform2, *args, **kwargs):
        super(MyForm1, self).__init__(*args, **kwargs)
        self.form2 = form2

    def clean(self):
        if not self.cleaned_data['other_field_required']:
            self.form2.fields['other_field_required'].required = False
...

def myview(request):
    form2 = MyForm2(request.POST)
    form1 = MyForm1(form2, data=request.POST)
    ...
0 голосов
/ 07 октября 2010

Я бы отключил поля, используя JavaScript.Я бы порекомендовал поискать JQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...