Ciao Riccardo

ho provato con la callable ma non è sufficiente: non prende parametri e farlo con una closure non mi è riuscito Ho risolto con un Field custom, che riceve sia "value", col valore associato a "bevanda", sia "data", con tutti i valori associati a "Ordine", cioè in breve il contesto di informazioni che mi serviva.
Più o meno così:

class BevandaField(Field):

    def _deserialize(self, value, attr, data, **kwargs):
        if data['eta'] > 18:
            return BevandaMaggiorenni().load(value)

        return BevandaMinorenni().load(value)


class Ordine(Schema):
    eta = fields.Integer(required=True)
    bevanda = BevandaField(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')

Per brevità, ho omesso qualche controllo e ottimizzazione aggiuntivi, ma a chi servisse dovrebbe bastare per cominciare

ciao

federico
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a