Google app engine Google数据存储NDB验证可选整数属性
如何验证空表单字段字符串Google app engine Google数据存储NDB验证可选整数属性,google-app-engine,google-cloud-datastore,app-engine-ndb,Google App Engine,Google Cloud Datastore,App Engine Ndb,如何验证空表单字段字符串'以将无指定给IntegerProperty class MyIntegerProperty(ndb.IntegerProperty): def _validate(self, value): if isinstance(value, basestring): if len(value) == 0 and self._required is False: return ????????????
'
以将无指定给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()
它能比这更聪明吗?验证程序可以生成属性值或引发异常,从而阻止保存实体。从表格中: 将使用参数(prop、value)调用,并且应返回 (可能是强制的)值或引发异常。呼叫 再次对强制值执行函数时,不应进一步修改该值。 (例如,返回value.strip()或value.lower()是不正确的 很好,但不是值+“$”)也可能返回None,这意味着 “不变”。另见 但以上这些都不是您真正想要的,即删除属性。请注意:
- 将属性值设置为
(例如,对于None
,这将失败)与删除属性不同(对于IntegerProperty
,完全可以)IntegerProperty
- 使用验证器时将属性值设置为
,可能会很棘手,因为从验证器返回None
意味着None
没有更改
因此,我相信您必须保持当前对该案例的处理。验证程序可以生成属性值或引发异常,从而阻止保存实体。从表格中: 将使用参数(prop、value)调用,并且应返回 (可能是强制的)值或引发异常。呼叫 再次对强制值执行函数时,不应进一步修改该值。 (例如,返回value.strip()或value.lower()是不正确的 很好,但不是值+“$”)也可能返回None,这意味着 “不变”。另见 但以上这些都不是您真正想要的,即删除属性。请注意:
- 将属性值设置为
(例如,对于None
,这将失败)与删除属性不同(对于IntegerProperty
,完全可以)IntegerProperty
- 使用验证器时将属性值设置为
,可能会很棘手,因为从验证器返回None
意味着None
没有更改
因此,我相信您必须保留当前处理此案件的方法。好的,我将保留当前的解决方案。我认为如果
None
对于IntegerProperty
是无效的值,我希望我的account.posint是None
返回False
,这可能与验证器为什么不会用None调用有关。好的,我将保留当前的解决方案。我认为,如果None
对于IntegerProperty
是无效的值,我希望我的account.posint是None
返回False
,这可能与验证器为什么不会用None调用有关。
if len(request.form[name]) == 0:
delattr(entity, name)
else:
setattr(entity, name, request.form[name])