from wtforms import Form
from wtforms.fields import IntegerField, FormField
class Attributes(Form):
height = IntegerField('height')
weight = IntegerField('weight')
Чтобы создавать формы итеративно, вы можете сделать одно из следующих действий:
def main(people=['John', 'Ted', 'David']):
class Main(Form):
pass
for person in people:
setattr(Main, person, FormField(Attributes))
return Main()
или
class Main(Form):
for person in ['John', 'Ted', 'David']:
vars()[person] = FormField(Attributes)
del person
лично я предпочитаю второе, поскольку это правильная структура класса, номенее динамичный.
Чтобы построить словарь, вы можете сделать следующее:
obj = Main()
data = dict()
for field in obj: # <- this works since obj has an __iter__ method self defined
for key in field.data.keys():
data.update({field.name + '_' + key: field.data[key]})
print(data)
>>> {'John_height': None, 'John_weight': None, 'Ted_height': None, 'Ted_weight': None, 'David_height': None, 'David_weight': None}
Значения None
обусловлены пустой формой конструкции.