0

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

2 回答 2

0

Maybe you are looking for something like 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)
于 2013-08-13T12:52:13.047 回答
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)
于 2013-10-26T21:03:32.613 回答