0

我创建了一个ndb.KeyProperty可以接受键的子类,也可以接受实体或基本 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类。

4

1 回答 1

0

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

class AutoKeyProperty(ndb.KeyProperty):
    def _to_base_type(self, value):
        return to_key(value)
于 2013-10-03T16:19:54.243 回答