2013-10-02 34 views
0

我已经创建了一个ndb.KeyProperty的子类,它可以接受密钥,也可以接受实体或基本64个密钥字符串,并将它们转换为密钥。它工作得很好,除非我尝试创建一个repeated属性。ndb属性的重复子类

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

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类。

回答

0

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

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

对不起,没有时间检查,直到now.I想创造一个要点说明为何上述不工作,但即使是使用自己的代码从上面看,它现在可以正常工作。不知道什么改变了,除了SDK 1.8.6。 –