如何验证空的表单字段字符串''
,以将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()不会出现的情况 需要处理:
无:不会用无调用它们(如果返回无,则此 表示该值不需要转换。
我当前正在做的是手动处理此案:
if len(request.form[name]) == 0:
delattr(entity, name)
else:
setattr(entity, name, request.form[name])
会比这更聪明吗?
答案 0 :(得分:2)
验证器可以产生属性值或引发异常,从而阻止保存实体。在Property Options表中:
将使用参数(prop,value)调用,并且应该返回 (可能是强制的)值或引发异常。呼叫 对强制值再次执行功能时,不应进一步修改该值。 (例如,返回 value.strip()或 value.lower()是 ,但不是值+'$'。)还可能返回 None (无),这意味着 “不用找了”。另请参见Writing Property Subclasses
但是上述所有都不是您真正想要的,即删除该属性。请注意:
None
(例如,对于IntegerProperty
会失败)与删除属性(对于IntegerProperty
完全正确)不同/ li>
None
可能很棘手,因为从验证器返回None
意味着no change
。因此,我相信您必须继续处理此案。