Mr *_*her 5 python flask 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")`
Run Code Online (Sandbox Code Playgroud)
我可以使用以下语法预填充字段列表:
form = InstituteForm(institue_name="cambridge",
email=["email@gmail", "email@gmail"])
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚预填充FormField包含表单对象的的语法。
首先,我创建一个项目表单:
p = ProjectForm(name=" test", workflow=["adadadad", "adasdasd", "adasdadas"])
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试将其添加到InstituteForm表单中。
我试过了:
form = InstituteForm(institue_name=store_i,
project_name=p,
email=store_email)
Run Code Online (Sandbox Code Playgroud)
对于我得到的HTML输出:
上载示例输出[ http://tinypic.com/r/jpfz9l/5],没有足够的点数来发布图像以使堆栈溢出。
而且我尝试过类似的语法:
form = InstituteForm(institue_name=store_i,
project_name.name=p,
email=store_email)
Run Code Online (Sandbox Code Playgroud)
和
form = InstituteForm(institue_name=store_i,
project_name=p.name,
email=store_email)
Run Code Online (Sandbox Code Playgroud)
乃至
form = InstituteForm(institue_name=store_i,
project_name=ProjectForm(name="this is a test"),
email=store_email)
Run Code Online (Sandbox Code Playgroud)
搜索并找到另一个线程(没有回复)来回答类似的问题:
可以project_name 是 dict 或对象(不是表单对象,因为它将填充InstituteForm.project_namehtml 标记值),因此您可以使用以下代码:
form = InstituteForm(institue_name="cambridge",
project_name=dict(name="test name"),
email=["email@gmail", "email@gmail"])
Run Code Online (Sandbox Code Playgroud)
或者
class Project(object):
name = "test"
workflow = ["test1", "test2"]
form = InstituteForm(institue_name="cambridge",
project_name=Project(),
email=["email@gmail", "email@gmail"])
Run Code Online (Sandbox Code Playgroud)
或者
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())
Run Code Online (Sandbox Code Playgroud)
此示例等效,因为 WTForms 使用带obj参数的构造函数,并且**kwargs其工作方式与此示例类似。