Нет причин делать это таким образом. Вы делаете вещи излишне сложными.
Вместо передачи начальных значений в фабричную функцию, которая возвращает класс с предварительно определенными классами, опустите исходные параметры в определении формы и передайте их во время создания экземпляра формы:
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})