Формы Wtforms, синтаксис для обработки встроенного поля форм


Пытается заполнить поле формы Wtform, с помощью данных извлекает базу данных mongo db, а затем передает ее jinja/flask для создания редактируемой предварительно заполненной формы для системы REST, которую я строю.

Структура моей формы:

class ProjectForm(Form):
    name = TextField("Name of Project")     
    workflow =FieldList(TextField(""), min_entries=5)

class InstituteForm(Form):
    institue_name = TextField("Name of Institue")
    email = FieldList(TextField(""), min_entries=3)
    project_name = FormField(ProjectForm)
    submit = SubmitField("Send")`

Я могу предварительно заполнить список полей, используя следующий синтаксис:

form = InstituteForm(institue_name="cambridge",
                     email=["email@gmail", "email@gmail"])
Однако я не могу понять синтаксис для предварительного заполнения FormField, содержащего объект формы.

Сначала я создаю форму проекта:

p = ProjectForm(name=" test", workflow=["adadadad", "adasdasd", "adasdadas"])

И теперь я пытаюсь добавьте его в форму InstituteForm.

Я пробовал:

form = InstituteForm(institue_name=store_i,
                     project_name=p,
                     email=store_email)

Для которого я получаю HTML вывод:

Загруженный пример вывода [http://tinypic.com/r/jpfz9l/5] , не хватает точек, чтобы разместить изображение для переполнения стека.

И я попробовал синтаксис, как:

form = InstituteForm(institue_name=store_i,
                     project_name.name=p,
                     email=store_email)

И

form = InstituteForm(institue_name=store_i,
                     project_name=p.name,
                     email=store_email)

И даже

form = InstituteForm(institue_name=store_i,
                     project_name=ProjectForm(name="this is a test"),
                     email=store_email)

Сделал поиск и нашел другую нить (без ответа) на аналогичный вопрос:

Использование FieldList и FormField

1 4

1 ответ:

Есть project_name может быть dict или object (не объект формы, потому что он будет заполнять InstituteForm.project_name значениями тегов html), поэтому вы можете использовать следующий код:

form = InstituteForm(institue_name="cambridge",
                     project_name=dict(name="test name"),
                     email=["email@gmail", "email@gmail"])

Или

class Project(object):
    name = "test"
    workflow = ["test1", "test2"]

form = InstituteForm(institue_name="cambridge",
                     project_name=Project(),
                     email=["email@gmail", "email@gmail"])

Или

class Project(object):
    name = "test"
    workflow = ["test1", "test2"]

class Institute(object):
    institue_name = "cambridge"
    project_name = Project()
    email = ["email@gmail", "email@gmail"]

form = InstituteForm(obj=Institute())

Эти примеры эквивалентны, поскольку WTForms использует конструктор с параметрами obj и **kwargs, которые работают аналогично для этих примеров.