WTForms-flask: организовать название поля формы и данные в словарь - PullRequest
0 голосов
/ 03 октября 2018

Я застрял на этом некоторое время:

У меня есть такая форма:

class attributes(Form):
    height=IntegerField('height')
    weight=IntegerField('weight')

class main(Form):
    John=FormField(attributes)
    Ted=FormField(attributes)
    David(FormField(attributes)`

Я хочу итеративно создать словарь для хранения метки идентифицирующего поляи данные поля в колбе без использования John_height=John.height.data для каждого FormField.Идея состоит в том, чтобы в конечном итоге передать словарь для записи в базу данных с помощью оператора SQL, где ключ словаря будет соответствовать столбцу базы данных, а данные поля формы будут значениями базы данных.

Словарь должен выглядеть примерно так:

{John_height : 170,
John_weight: 170,
Ted_height : 120,
Ted_weight: 190,
David_height : 150,
David_weight: 100}

Заранее спасибо.

1 Ответ

0 голосов
/ 04 октября 2018
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 обусловлены пустой формой конструкции.

...