Python Flask restx模型嵌套通配符dict

Python Flask restx模型嵌套通配符dict,python,flask,flask-restx,Python,Flask,Flask Restx,我想知道我是否是唯一一个在与这样的问题作斗争的人 以dict为例: data = {'totalSize': 3000, 'freq': 2400, 'distribution': {'ram1': {'size': 200, 'status': 'OK'}, 'ram2': {'size': 100, 'status': 'OK'} } } 请不要认为ram1/2是无法预先知道的动态键

我想知道我是否是唯一一个在与这样的问题作斗争的人

以dict为例:

data = {'totalSize': 3000, 'freq': 2400,
        'distribution':
            {'ram1': {'size': 200, 'status': 'OK'},
             'ram2': {'size': 100, 'status': 'OK'}
             }
        }
请不要认为ram1/2是无法预先知道的动态键

问题,我的api.model应该是什么样子?我有:

wild = {"*": fields.Wildcard(fields.String())}
hw_memory = api.model('Memory', {
    'totalSize': fields.Integer(description='total memory size in MB',
                                example=1024),
    'freq': fields.Integer(description='Speed of ram in mhz', example=800),
    'distribution': fields.Nested(wild),
})

它正在工作,但是它不验证“分发”下的任何内容,换句话说,它的工作方式类似于通配符,任何内容都将被接受。
有没有一种方法可以用具有通配符动态键的方式嵌套dict?

首先,
通配符
字段类型接受dict值的定义,而不是键的定义,即
字段。通配符(fields.String())
验证dict值只能是字符串类型(在您的情况下,您需要提供分发的定义)

第二个错误是您将
分布
字段定义为
嵌套
对象,而不是使用
Wilcard

以下代码应用于验证目的:


DISTRIBUTION\u MODEL=NAMESPACE.MODEL(“DISTRIBUTION”,dict(
size=fields.Integer(),
状态=字段。字符串(),
))
MEMORY_MODEL=NAMESPACE.MODEL(“内存”,dict(
totalSize=fields.Integer(description='total memory size in MB',
示例=1024),
freq=fields.Integer(description='ram的速度,单位为mhz',示例=800),
分布=字段.通配符(字段.嵌套(分布模型))
))
不幸的是,它不适用于编组。 下一个代码应该适用于封送,但不适用于验证输入有效负载:


OUTPUT\u MEMORY\u MODEL=NAMESPACE.MODEL(“OutputMemory”,dict(
totalSize=fields.Integer(description='total memory size in MB',
示例=1024),
freq=fields.Integer(description='ram的速度,单位为mhz',示例=800),
distribution=flask_utils.fields.Nested(
NAMESPACE.model(
“分配”{
“*”:字段。通配符(
#分布模型取自前面的代码段
字段。嵌套(分布模型)
)
}
)
)
))

update我删除了注释,因为这是我愚蠢的错误(将模型传递到marshal()的位置不正确。无论如何-问题仍然有效,您提供的解决方案在嵌套的dict中没有通配符键,如果我尝试使用此模型封送,我会得到“{”totalSize“:12,“freq“:2400,“distribution”:{”size“:null,”status“:null}”这是不对的。它应该是“{“totalSize”:12,“freq”:2400,“distribution:{'ram1':{“size”:null,“status”:null}}}}您在问题中没有提到封送:)下面的代码片段可以很好地验证输入数据。奇怪的是,同一个模型不适用于封送。听起来像是flask restx的一个bug。我唯一能建议的是——提供两个不同的模型用于验证和封送(我用有效的封送模型更新了回复)。Andrey,你帮了大忙!