2013-10-02 2 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) 

Обработка Iterable значения в _validate просто переходит к проблеме вниз к основанию ndb.KeyProperty класса.

ответ

0

Правильная функция, которую вам необходимо переопределить, - _to_base_type. Эта функция преобразует входное значение в экземпляр типа свойства, в вашем случае - ключ. Так что ваш AutoKeyProperty класс будет выглядеть следующим образом:

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

К сожалению, не было времени, чтобы проверить это, пока now.I не хотел, чтобы создать суть, чтобы показать, почему выше не работает, но даже используя свой собственный код сверху, он работает правильно. Не знаю, что изменилось, кроме, возможно, SDK 1.8.6. –

Смежные вопросы