在ndb定制属性中将值解析为None

时间:2013-08-13 08:28:17

标签: 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.
        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)

2 个答案:

答案 0 :(得分:0)

也许您正在寻找类似 ndb.ComputedProperty 的内容?

class YourBool(ndb.Model):
    my_input = StringProperty()
    val = ndb.ComputedProperty(
        lambda self: True if self.my_input in ["1","t","True","y","yes"] else False)

答案 1 :(得分:0)

我的实现会覆盖_set_value方法。 Appengine文档没有记录这一点,但它有效。

class MyBooleanProperty(ndb.BooleanProperty):
    def _set_value(self, entity, value):
        if value == '':
            value = None
        ndb.BooleanProperty._set_value(self, entity, value)