加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – WTForms:FormField的FieldList无法加载嵌套数据

发布时间:2020-12-20 13:44:02 所属栏目:Python 来源:网络整理
导读:我在FieldList中的FormField中有一个自定义字段:locations class LocationForm(Form): id = HiddenField('id') title = StringField(_l('Title'),[Required()]) location = CoordinatesField(_l('Coordinates'))class ProjectForm(Form): title = StringFie
我在FieldList中的FormField中有一个自定义字段:locations

class LocationForm(Form):
    id = HiddenField('id')
    title = StringField(_l('Title'),[Required()])
    location = CoordinatesField(_l('Coordinates'))

class ProjectForm(Form):
    title = StringField(_l('Title'))
    manager = StringField(_l('Manager'))
    description = StringField(_l('Description'))
    locations = FieldList(FormField(LocationForm),min_entries=1)

当提交时,此表单将保存到这样的对象:

document = {
    'title': unicode,'description': unicode,'manager': unicode,'locations': [{
        'id': uuid.UUID,'title': unicode,'location': {'coordinates':[float],'text':unicode}
        }],}

当我尝试将数据加载到GET处理程序的表单时,
除了位置之外的一切都很好:

f = form(MultiDict(document))
f.locations.data
>> {'id':'','title':'','location':''}

我做了一些调试,发现WTForms在将文档的数据加载到表单时搜索“locations-0-location”但是MultiDict()但是这些键不存在. MultiDict不会将字典列表转换为键’locations-i -…’.

为这样的嵌套数据结构制作WTForm的正确方法是什么?

解决方法

我有同样的问题,并能够通过将列表展平为带有添加前缀的字典来对其进行排序.

就像是:

document = {
    'title': unicode,}

locations = [{
    'id': uuid.UUID,'text':unicode}
}]

document.update({'locations-%s-%s' % (num,key): val for num,l in enumerate(locations) for key,val in l.items()})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读