Базовый класс FlaskForm
довольно специфичен в своей конструкции.Чтобы определить динамическую форму, добавьте параметры после того, как базовый класс был создан с super()
.Т.е.
class GenerateForm(FlaskForm):
radio_fields = RadioField('', choices=[])
submit = SubmitField('submit')
def __init__(self, label, choices):
super().__init__()
self.radio_fields.choices = label
self.radio_fields.choices = choices
Затем вы можете создать экземпляр формы с помощью:
GenerateForm('My Label', [('val', 'desc'), ('val2', 'desc2')])]
Вы также можете создать Фабрику форм следующим образом:
def Form(n, *args):
class FormGenerator(FlaskForm):
submit = SubmitField('submit')
for i in range(n):
setattr(FormGenerator, RadioField(args[i][0], choices=args[i][1])
return FormGenerator()
Затем выможет создать экземпляр формы с помощью:
Form(2, *(('rad1', [('v1', 'd1'), ('v2', 'd2')]), ('rad2', [('v1', 'd1'), ('v2', 'd2')])))