5

尝试填充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"])

但是,我无法弄清楚预填充 a 的语法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

4

1 回答 1

3

project_name 可以有 dict 或 object(不是表单对象,因为它将填充InstituteForm.project_namehtml 标记值),因此您可以使用下一个代码:

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在此示例中的工作方式类似。

于 2013-06-29T06:30:34.380 回答