Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将数据从flask_sqlalchemy orm添加到WTForm字段列表?_Flask_Flask Sqlalchemy_Wtforms_Fieldlist - Fatal编程技术网

如何将数据从flask_sqlalchemy orm添加到WTForm字段列表?

如何将数据从flask_sqlalchemy orm添加到WTForm字段列表?,flask,flask-sqlalchemy,wtforms,fieldlist,Flask,Flask Sqlalchemy,Wtforms,Fieldlist,我想建立一个使用flask,WTForm和flask_sqlalchemy的网站。有一个网页供用户通过WTForm提交信息,现在我想创建另一个网页来显示数据库中的所有数据。我想使用WTForm来完成此操作。在一本书中,示例如下: def GetSchoolFormById(school_id): school = orm.School.query.get(int(school_id)) if school is None: return None scho

我想建立一个使用flask,WTForm和flask_sqlalchemy的网站。有一个网页供用户通过WTForm提交信息,现在我想创建另一个网页来显示数据库中的所有数据。我想使用WTForm来完成此操作。在一本书中,示例如下:

def GetSchoolFormById(school_id):
    school = orm.School.query.get(int(school_id))
    if school is None:
        return None
    schoolform = SchoolForm()
    schoolform.id.data = school.id
    schoolform.name.data = school.name
    schoolform.area_id.data = school.area_id
    schoolform.area_name = school.area.name
    schoolform.teachdesc.data = school.teachdesc
    schoolform.address.data = school.address
    schoolform.schooltype_id.data = school.schooltype_id
    schoolform.schooltype_name = school.schooltype.name
    schoolform.website.data = school.website
    schoolform.distinguish.data = school.distinguish
    schoolform.leisure.data = school.leisure
    schoolform.threashold.data = school.threashold
    schoolform.partner.data = school.partner
    schoolform.artsource.data = school.artsource
    schoolform.feedesc.data = school.feedesc
    schoolform.longitude.data = school.longitude
    schoolform.latitude.data = school.latitude
    schoolform.schoolimages = school.schoolimages
    schoolform.feature_ids.data = [x.feature_id for x in school.schoolfeatures]

    schoolform.area_id.choices = g_choices_area
    schoolform.schooltype_id.choices = g_choices_schooltype
    schoolform.feature_ids.choices = g_choices_feature
    return schoolform
但对于我来说,我使用了FieldList,所以我不知道如何像示例那样添加数据

class ProjectForm(FlaskForm):
    project_id = HiddenField('项目ID')
    project_name = StringField('工程名称')
    project_ST = DateField('起始时间', format='%Y-%m-%d')
    project_FT = DateField('截止时间', format='%Y-%m-%d')


class ItemsForm(Form):
    item_id = HiddenField('事件ID')
    item_name = StringField('事件名称')
    pre_item = SelectMultipleField('前驱事件')
    # 暂定为string类型,加到date的%d里,具体我也不会,实现不了可以再改
    last_time = StringField('持续时间')


class MainForm(FlaskForm):
    items = FieldList(
        FormField(ItemsForm)
    )
当我测试代码时,底部第二行出现如下错误:

TypeError: formdata should be a multidict-type wrapper that supports the 'getlist' method

如何处理它?我是否应该使用其他方法将数据传递到html页面而不是WTForm?

WTForms表单的uuu init_uuu方法的参数如下所示
\uu init_uuu(formdata=None,obj=None,prefix='',data=None,meta=None,**kwargs)
。您正在传递一个Sqlalchemy对象作为formdata参数,该参数用于接收通过http post作为Werkzeug Multidict发送的用户表单数据。如果将该对象作为obj参数传递,则只要数据库列名与表单字段名匹配,该对象就可以工作。您也可以使用此技术初始化ProjectForm,而不是依次设置每个字段的数据

project = DBProject.query.filter_by(project_id=1).first()
form_one = ProjectForm(obj=project)

items = list(DBItem.query.filter().all())
for item in items:
    form_two.items.append_entry(ItemsForm(obj=item))
project = DBProject.query.filter_by(project_id=1).first()
form_one = ProjectForm(obj=project)

items = list(DBItem.query.filter().all())
for item in items:
    form_two.items.append_entry(ItemsForm(obj=item))