【发布时间】:2013-08-13 08:28:16
【问题描述】:
我有一个自定义的 ndb 属性子类,它应该将一个空字符串解析为 None。当我在 _validate 函数中返回 None 时,会忽略 None 值,仍然使用空字符串。
我可以以某种方式将输入值强制转换为无吗?
class BooleanProperty(ndb.BooleanProperty):
def _validate(self, value):
v = unicode(value).lower()
# '' should be casted to None somehow.
if v == '':
return None
if v in ['1', 't', 'true', 'y', 'yes']:
return True
if v in ['0', 'f', 'false', 'n', 'no']:
return False
raise TypeError('Unable to parse value %r to a boolean value.' % value)
【问题讨论】:
-
你需要显示一些代码,你可以在一些属性中存储None。例如,您是否正确地对属性进行了子类化。您需要提供更多信息。
-
你的做法是错误的 - 请参阅属性子类的文档 - 它说 _validate()、_to_base_type() 和 _from_base_type() 不需要处理:无:他们不会用 None 调用(如果他们返回 None,这意味着该值不需要转换)。
-
另外提供一个自定义验证器,您不需要对属性进行子类化,只需在声明属性时提供一个验证器。
-
你真正想要达到什么目的? True、False 的值以及取消设置 bool 的能力,即重置为 None ?
-
我正在尝试直接从 api 调用解析值。 api 参数中的空字符串应将值设置为 None。
标签: python google-app-engine app-engine-ndb