我从谷歌应用引擎和验证器获得ndb
模型。但是当我使用邮递员尝试验证并从邮递员生成的字符串强制执行int时。我仍然得到BadValueError:BadValueError: Expected integer, got u'2'
出了什么问题?
def int_validator(prop, val):
if val:
val = int(val)
return val
class TwitterUser(ndb.Model):
"""Model for twitter users"""
screen_name = ndb.StringProperty(required=True)
followers_count = ndb.IntegerProperty(validator=int_validator)
答案 0 :(得分:1)
ndb.IntegerProperty
' _validate()
方法will run before your custom validator因此引发了异常。
要让您的代码正常工作,您需要使用ndb.Property
代替ndb.IntegerProperty
或继承_validate()
并覆盖其def int_validator(prop, val):
if val:
val = int(val)
return val
class TwitterUser(ndb.Model):
"""Model for twitter users"""
screen_name = ndb.StringProperty(required=True)
followers_count = ndb.Property(validator=int_validator)
方法。
第一个解决方案看起来像这样:
class CustomIntegerProperty(ndb.IntegerProperty):
def _validate(self, value):
if val:
val = int(val)
return val
# you still need to return something here or raise an exception
class TwitterUser(ndb.Model):
"""Model for twitter users"""
screen_name = ndb.StringProperty(required=True)
followers_count = ndb.CustomIntegerProperty()
第二个是这样的:
int
我认为两者都不是理想的解决方案,因为您可能更好地确保您将BadValueError
传递给followers_count属性并且body
以及以防万一。{1}}。