Google App Engine: ограничения целостности модели?

У меня есть модель хранилища данных, представляющая элементы на сайте электронной коммерции:

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

Есть ли какой-нибудь способ обеспечить ограничения целостности? Например, я хотел бы убедиться, что quantity никогда не устанавливается меньше 0.

1 ответ

Решение

Конструктор Property позволяет вам указать функцию с аргументом 'validator'. Эта функция должна принимать один аргумент, значение и вызывать исключение, если значение valid недействительно. Например:

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))

Обратите внимание, что в примере используется вложенная функция для определения валидаторов общего назначения - вы, конечно, можете использовать простые функции, если хотите написать валидатор более специального назначения.

Другие вопросы по тегам