我有一个表示电子商务网站中项目的数据存储模型:
class Item(db.Model):
CSIN = db.IntegerProperty()
name = db.StringProperty()
price = db.IntegerProperty()
quantity = db.IntegerProperty()
是否有某种方法可以强制执行完整性约束?例如,我想确保quantity
永远不会设置为小于0.
答案 0 :(得分:2)
Property constructor允许您使用'validator'命名参数指定一个函数。此函数应采用一个参数,即值,并在有效无效时引发异常。例如:
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))
请注意,该示例使用嵌套函数来定义通用验证器 - 当然,如果要编写更专用的验证器,则可以使用简单函数。