Domanda

Ho un modello datastore che rappresentano elementi in un sito e-commerce:

class Item(db.Model):
    CSIN = db.IntegerProperty()
    name = db.StringProperty()
    price = db.IntegerProperty()
    quantity = db.IntegerProperty()

C'è qualche modo per far rispettare i vincoli di integrità? Per esempio, vorrei fare in modo che non è mai quantity impostato per essere inferiore a 0.

È stato utile?

Soluzione

Il costruttore Proprietà permette di specificare un funziona con il 'validatore' chiamato argomento. Questa funzione dovrebbe prendere un argomento, il valore, e sollevare un'eccezione se la validità non è valido. Ad esempio:

def range_validator(minval, maxval):
  def validator(v):
    if (minval is not None and v < minval) or (maxval is not None and v > maxval):
      raise ValueError("Value %s outside range (%s, %s)" % (v, minval, maxval))
  return validator

class Item(db.Model):
    CSIN = db.IntegerProperty()
    name = db.StringProperty()
    price = db.IntegerProperty()
    quantity = db.IntegerProperty(validator=range_validator(0, None))

Si noti che l'esempio utilizza una funzione annidata per definire validatori general-purpose -. Si può, naturalmente, utilizzare le funzioni semplici se si vuole scrivere un più speciale validatore scopo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top