我从Google App Engine和验证器获得了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)
最佳答案
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
传递给followers_count属性,并为BadValueError
装上以防万一。