Джанго, валидация формы - PullRequest
       5

Джанго, валидация формы

0 голосов
/ 21 февраля 2010

Я хочу, чтобы мои формы были динамическими, некоторые параметры, такие как max_length для IntegerField, варьируются от модели к модели. Используя информацию из здесь , я написал эту форму:

def my_form(inputname, inputlastname, inputamount):
 class MyForm(forms.Form):
  name = forms.CharField(max_length=50,required=True,initial=inputname)
  lastname = forms.CharField(max_length=50, required=True,initial=inputlastname)
  amount= forms.IntegerField(max_value=inputamount, required=True)
 return MyForm

Он хорошо отрисовывается в шаблоне, когда я его так называю и перехожу на шаблон:

form = my_form("David","Bowie",4)()

Однако я не могу понять, как я могу это проверить, это не получается:

if request.method == 'POST': form = MyForm (request.POST) if form.is_valid ()

1 Ответ

4 голосов
/ 21 февраля 2010

Нет причин делать это таким образом. Вы делаете вещи излишне сложными.

Вместо передачи начальных значений в фабричную функцию, которая возвращает класс с предварительно определенными классами, опустите исходные параметры в определении формы и передайте их во время создания экземпляра формы:

class MyForm(forms.Form):
    name = forms.CharField(max_length=50,required=True)
    lastname = forms.CharField(max_length=50, required=True)

...

form = MyForm(request.POST, initial={'firstname':myfirstname, 'surname':mysurname})

Отредактировано после дополнительного вопроса

Чтобы иметь динамическую max_value для суммы, вы можете переопределить метод __init__ формы и установить его там. Затем еще раз вы передадите значение при создании экземпляра.

class MyForm(forms.Form):
    name = forms.CharField(max_length=50,required=True)
    lastname = forms.CharField(max_length=50, required=True)
    amount = forms.IntegerField(required=True)

    def __init__(self, *args, **kwargs):
        amount_max = kwargs.pop('amount_max', None)
        super(MyForm, self).__init__(*args, **kwargs)
        if amount_max:
            self.fields['amount'].max_value = amount_max

...

form = MyForm(request.POST, amount_max=10,
              initial={'firstname':myfirstname, 'surname':mysurname})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...