Python 将ndb自定义属性中的值解析为“无”

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.

我有一个自定义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)

也许你正在寻找类似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)