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

use*_*356 5 python flask wtforms

我有一个FieldList中内FormField内的自定义字段:位置

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)
Run Code Online (Sandbox Code Playgroud)

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

document = {
    'title': unicode,
    'description': unicode,
    'manager': unicode,
    'locations': [{
        'id': uuid.UUID,
        'title': unicode,
        'location': {'coordinates':[float], 'text':unicode}
        }],
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试将数据加载到GET处理程序的表单中时,除位置之外的所有内容都可以正常加载:

f = form(MultiDict(document))
f.locations.data
>> {'id':'','title':'','location':''}
Run Code Online (Sandbox Code Playgroud)

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

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

s-b*_*ock 1

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

就像是:

document = {
    'title': unicode,
    'description': unicode,
    'manager': unicode,
}

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

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