2

我有一个代表电子商务网站中项目的数据存储模型:

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

有没有办法强制执行完整性约束?例如,我想确保它quantity永远不会设置为小于 0。

4

1 回答 1

2

Property 构造函数允许您使用“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))

请注意,该示例使用嵌套函数来定义通用验证器 - 当然,如果您想编写更特殊用途的验证器,您可以使用简单的函数。

于 2010-03-10T10:26:52.647 回答