Python 将ndb自定义属性中的值解析为“无”
我有一个自定义ndb属性子类,它应该将空字符串解析为None。当我在_validate函数中返回None时,None值被忽略,空字符串仍被使用。Python 将ndb自定义属性中的值解析为“无”,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我有一个自定义ndb属性子类,它应该将空字符串解析为None。当我在_validate函数中返回None时,None值被忽略,空字符串仍被使用。 我是否可以将输入值强制转换为“无” class BooleanProperty(ndb.BooleanProperty): def _validate(self, value): v = unicode(value).lower() # '' should be casted to None somehow.
我是否可以将输入值强制转换为“无”
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)
也许你正在寻找类似ndb.ComputedProperty的东西
我的实现覆盖了_set_value方法。Appengine文档中没有记录这一点,但它是有效的
class MyBooleanProperty(ndb.BooleanProperty):
def _set_value(self, entity, value):
if value == '':
value = None
ndb.BooleanProperty._set_value(self, entity, value)
您需要显示一些代码,您可以在某些属性中不存储任何代码。例如,您是否正确地子类化了属性。您需要提供更多信息。您这样做是错误的-请参阅文档中的属性子类-它说_validate()、_to_base_type()和_from_base_type()不需要处理:None:它们将不会用None调用(如果它们返回None,这意味着该值不需要转换)。此外,要提供自定义验证程序,您不需要对属性进行子类化,只需在声明属性时提供一个验证程序。您实际想要实现什么?值True、False以及将bool-ie重置为None的能力?我试图直接从api调用解析这些值。api参数中的空字符串应将值设置为无。
class MyBooleanProperty(ndb.BooleanProperty):
def _set_value(self, entity, value):
if value == '':
value = None
ndb.BooleanProperty._set_value(self, entity, value)