重复的ndb属性的子类

时间:2013-10-02 13:07:37

标签: python google-app-engine app-engine-ndb

我创建了一个ndb.KeyProperty的子类,它可以接受键,但也可以接受实体或base 64键字符串并将它们转换为键。除非我尝试创建repeated属性,否则它的效果很好。

基本上我的代码是这样的:

def to_key(target):
    if isinstance(target, ndb.Model):
        target_key = target.key
    elif isinstance(target, ndb.Key):
        target_key = target
    else:
        try:
            target_key = ndb.Key(urlsafe=target)
        except:
            raise TypeError('%s is not an ndb instance or key' % target)
    return target_key

class AutoKeyProperty(ndb.KeyProperty):
    def _validate(self, value):
        return to_key(value)

处理_validate中的可迭代值只会将问题移至基础ndb.KeyProperty类。

1 个答案:

答案 0 :(得分:0)

您需要覆盖的正确功能是_to_base_type。此函数将输入值转换为属性类型的实例,在您的情况下为Key。所以你的AutoKeyProperty课程看起来像这样:

class AutoKeyProperty(ndb.KeyProperty):
    def _to_base_type(self, value):
        return to_key(value)