我正在使用flask-restful构建API。我也使用flask-resfulplus来生成swagger文档。我想返回一个项目字典,其中密钥将根据项目而变化。我的模型看起来像这样:
item = api.model('Item',{
'item':fields.Integer()}) <- This is wrong
ItemModel = api.model('ItemsList', {
'_header': fields.Nested(_header),
'items':fields.Nested(item)
})
请注意,我尝试了一些变体,但似乎没有任何效果;这只是最新的互动。
我正在寻找的回应是这样的。
{
'_header':{} <-This works fine
'items': {
'item1':5,
'item2':2
}
}
项目词典中的项目将具有项目的不同键和计数作为值。
我已经尝试将项目字段设置为field.Raw()并且它工作正常,但它没有显示在swagger文档中。
请注意,我不想返回我正在使用的字典列表。
由于
答案 0 :(得分:0)
有时您有自己的自定义格式需求。您可以将这些字段子类化。原始类并实现format函数。当属性存储多条信息时,这特别有用。例如一个位域,其各个位代表不同的值。您可以使用字段将单个属性多路复用到多个输出值。
如果您不知道要取消编组的字段的名称,则可以使用通配符。
>>> from flask_restplus import fields, marshal
>>> import json
>>>
>>> wild = fields.Wildcard(fields.String)
>>> wildcard_fields = {'*': wild}
>>> data = {'John': 12, 'bob': 42, 'Jane': '68'}
>>> json.dumps(marshal(data, wildcard_fields))
>>> '{"Jane": "68", "bob": "42", "John": "12"}'
您为通配符指定的名称实际上是一个glob,如下所示。
>>> from flask_restplus import fields, marshal
>>> import json
>>>
>>> wild = fields.Wildcard(fields.String)
>>> wildcard_fields = {'j*': wild}
>>> data = {'John': 12, 'bob': 42, 'Jane': '68'}
>>> json.dumps(marshal(data, wildcard_fields))
>>> '{"Jane": "68", "John": "12"}'
注意 在模型 之外定义通配符很重要(即,您不能像这样使用它:res_fields = {'':fields.Wildcard(fields.String)})* ,因为必须保持状态,以跟踪已处理的字段。