7

我正在使用 flask-restful 构建一个 API。我还使用 flask-resfulplus 来生成招摇文档。我想返回一个项目字典,其中键会因项目而异。我的模型如下所示:

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 字段设置为 field.Raw() 并且它工作正常,但是它没有显示在 swagger 文档中。

请注意,我不想返回我正在使用的字典列表。

谢谢

4

1 回答 1

-1

有时您有自己的自定义格式需求。您可以继承 fields.Raw 类并实现格式功能。这在属性存储多条信息时特别有用。例如,一个位域,其各个位代表不同的值。您可以使用字段将单个属性多路复用到多个输出值。

如果您不知道要解组的字段的名称,可以使用通配符。

>>> 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)})*因为它必须是有状态的才能跟踪什么它已经处理过的字段。

于 2020-05-05T18:09:23.767 回答