我正在尝试在Flask中封送一个简单的数据结构,如下所示:
{
"globalNum": 1.23,
"perResultData": [
{
"string1": "test string",
"num1": 1.25
},
{
"string1": "test",
"num1": 1.22
}
]
}
我正在像这样建模该结构:
testmodel = api.model('Model', {
'globalNum': fields.Float,
'perResultData': fields.List(fields.Nested({
"string1": fields.String,
"num1": fields.Float
}))
})
[当我尝试进行此设置时(按照下面的最少失败代码),如果浏览到本地主机,则会收到警告:“未提供API定义。”并且Flask控制台显示:
File "/home/mikea/.local/lib/python3.6/site-packages/flask_restplus/swagger.py", line 574, in register_model
if name not in self.api.models:
TypeError: unhashable type: 'dict'
当我注释掉'@ api.marshal_with(testmodel)'行时,Flask可以完美地工作。有人可以告诉我我在做什么错吗?非常感谢
完整代码:
from flask_restplus import Resource, Api,fields
app = Flask(__name__)
api = Api(app)
testmodel = api.model('Model', {
'globalNum': fields.Float,
'perResultData': fields.List(fields.Nested({
"string1": fields.String,
"num1": fields.Float
}))
})
@api.route('/')
class incomingRequest(Resource):
@api.marshal_with(testmodel)
def post(self):
return {"globalNum":3.2,
"perResultData":[
{
"string1": "test string",
"num1": 1.25
},
{
"string1": "test",
"num1": 1.22
}
]}
if __name__ == '__main__':
app.run(debug=True)
答案在这里-https://github.com/noirbizarre/flask-restplus/issues/292
嵌套模型时,必须将它们包装在模型类中,如下所示:
testmodel = api.model('Model', {
'globalNum': fields.Float,
'perResultData': fields.List(fields.Nested(api.model({
"string1": fields.String,
"num1": fields.Float
})))
})