Формы 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)
Сделал поиск и нашел другую нить (без ответа) на аналогичный вопрос:
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
, которые работают аналогично для этих примеров.