我正在使用flask-restful构建一个API。我也在使用flask-resfulplus来生成swagger文档。我想返回一个项目的字典,其中的key会根据项目的不同而不同。我的模型是这样的。
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
}
}
item字典中的item会有一个不同的key,而count作为值。
我试过将 item 字段设置为 field.Raw(),效果很好,但是在 swagger 文档中却没有显示出来。
请注意,我不想返回一个字典列表,我已经在工作了。
谢谢,谢谢
有时你有自己的自定义格式需求。你可以将 fields.Raw类子类化,并实现format函数。当一个属性存储了多条信息时,这一点特别有用。例如,一个位字段,它的各个位代表不同的值。你可以使用field将一个属性复用为多个输出值。
如果您不知道您要取消标记的字段的名称,您可以使用通配符。
>>> 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(field.String)})*。 因为它必须是有状态的,以跟踪它已经处理了哪些字段。