如何验证空表单字段字符串''
以将None分配给IntegerProperty?
class MyIntegerProperty(ndb.IntegerProperty):
def _validate(self, value):
if isinstance(value, basestring):
if len(value) == 0 and self._required is False:
return ?????????????????
try:
value = int(value)
except ValueError:
raise BadValueError(u'{0} must be a valid '
'integer'.format(self._name))
if value < 0:
raise BadValueError(u'{0} must be '
'positive'.format(self._name))
return value
class Account(ndb.Model):
posint = MyIntegerProperty()
文件显示:
_validate((、_to_base_type((和_from_base_type(需要处理:
None:它们不会用None调用(如果它们返回None意味着该值不需要转换(。
我目前正在做的是手动处理该案例:
if len(request.form[name]) == 0:
delattr(entity, name)
else:
setattr(entity, name, request.form[name])
它能比这个更聪明吗?
验证器可以生成属性值,也可以引发异常,从而阻止实体的保存。从属性选项表:
将使用参数(prop,value(调用,并且应返回(可能是强制的(值或引发异常。调用函数不应进一步修改强制值。(例如,返回value.strip((或value.lower((是很好,但不是值+'$'。(也可能返回无,这意味着"没有变化"。另请参阅写入属性子类
但以上都不是您真正想要的,即删除属性。注意:
- 设置
None
的属性值(例如,对于IntegerProperty
,这将失败(与删除属性(对于IntegerProperty
,完全可以(不是一回事 - 在使用验证器时设置
None
的属性值可能很棘手,因为从验证器返回None
意味着no change
所以我相信你必须保持目前对此案的处理。