2010-03-10 2 views
2

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

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

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

ответ

2

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

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

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