To have one field repeated you can use wtforms.fields.FieldList
(see the documentation about Field Closures):
class ResultForm2(BaseForm):
selects = FieldList(SelectField(u'Select', coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'), (2, 'B'), (3, 'C'),
(4, 'D'), (5, 'E'), (6, 'FX'),
(7, 'na')]), min_entries=2)
That produces two select inputs with names "select-0" and "selects-1" (because of min_entries set to two). Both have identical data though.
You can also create forms dynamically (see documentation about Dynamic Form Composition), for example:
def my_dynamic_form(select_field_count=20):
class F(MyBaseForm):
pass
for i in range(select_field_count):
setattr(F, 'f%d' % i, SelectField('F%d' % i, coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'), (2, 'B'), (3, 'C'),
(4, 'D'), (5, 'E'), (6, 'FX'),
(7, 'na')]))
return F
This way the form can be constructed completely dynamic, for example SelectFields could have different choices.