flask restex @expect with nested fields

749 Views Asked by At

I am using nested fields to validate an incoming post request using @api.expect like

payload1 = api.model('Payload', {
'prop1': fields.Nested({'prop1_inner' : fields.String(required=True)})
})

payload2 = api.model('Payload', {
'prop1': fields.Nested(api.model("metadata", {
'prop1_inner': fields.String(required=True)
}))
})
  
 #doesn't work
 @api.expect(payload1 , validate=True)
 def post(self):
 #works
 @api.expect(payload2 , validate=True)
 def post(self):

I am getting an exception when I use payload1 like

'dict' object has no attribute 'name'

I expect both forms to validate the incoming request. Would like to know the reason nested fields without model wrapper doesn't work.

1

There are 1 best solutions below

0
On

Consider this. Nested models are not usually defined inside. They have to be a discrete model themselves with a discrete name, As swagger documents nested fields as separate models and so, here,

payload1_addon = api.Model('PayloadAddon',{
                                'prop1_inner' :fields.String(required=True)})

payload1 = api.model('Payload', {'prop1': fields.Nested(payload1_addon)})