[Python] Marshmallow: schema variabile in base al valore di altri campi

Riccardo Magliocchetti riccardo.magliocchetti a gmail.com
Gio 3 Dic 2020 16:38:43 CET


Ciao Federico,

On 03/12/20 16:24, Federico Fissore wrote:
> Ciao a tutti
> 
> Usate marshmallow per fare validazione dell'input?

L'ho usato diverso tempo fa

> Mi trovo con un problema che non so bene come affrontare: come posso decidere a 
> runtime quale Schema utilizzare per la validazione?

A nested dovresti poter passare una callable e quindi se gli arriva tutta la 
roba da deserializzare puoi metterci un if lì dentro. Altrimenti prima validi 
con uno Schema l'eta e poi passi il resto allo schema che valida la quantità giusto.

> Diciamo che ho una API che serve a inviare un ordine di acquisto di bevande: se 
> l'utente è minorenne può ordinare al massimo una bottiglia, altrimenti può anche 
> svuotarmi il magazzino
> 
> Gli schema sono:
> 
> class Ordine(Schema):
>    eta = fields.Integer(required=True)
>    bevanda = fields.Nested(BevandaMaggiorenni, required=True)
> 
> 
> class BevandaMaggiorenni(Schema):
>    quantita = fields.Integer(required=True)
> 
> 
> class BevandaMinorenni(Schema):
>    quantita = fields.Integer(required=True)
> 
>    @validates('quantita')
>    def validates_quantita(self, quantita):
>      if quantita > 1:
>        raise ValidationError('troppe bottiglie')

-- 
Riccardo Magliocchetti
@rmistaken

http://menodizero.it


Maggiori informazioni sulla lista Python