Я конвертирую свое приложение для использования NDB. Раньше у меня было что-то вроде этого:
@db.ComputedProperty
def someComputedProperty(self, indexed=False):
if not self.someCondition:
return []
src = self.someReferenceProperty
list = src.list1 + src.list2 + src.list3 + src.list4 \
+ [src.str1, src.str2]
return map(lambda x:'' if not x else x.lower(), list)
Как видите, мой метод генерации списка немного сложен, я предпочитаю оставить его таким. Но когда я начал конвертировать в NDB, я просто заменил @db.ComputedProperty
на @model.ComputedProperty
, но тогда я получил эту ошибку:
NotImplementedError: Property someComputedProperty does not support <type 'list'> types.
Я мог видеть в model.py
в ext.ndb, что ComputedProperty
наследуется от GenericProperty
, где в _db_set_value
есть несколько операторов if/else, которые обрабатывают значение в соответствии с его типом, за исключением того, что нет обработки для lists
В настоящее время он проходит первое условие и выдает эту ошибку, когда я возвращаю пустой список.
Есть ли способ обойти это и избежать ошибки?
indexed=False
вашей функции в первом фрагменте не влияет на индексацию вашего вычисляемого свойства. Как отмечает Мохамед Хамис, если вы не хотите, чтобы он индексировался, то нет смысла вообще хранить его в хранилище данных — просто используйте обычный @Property. - person Nick Johnson   schedule 18.01.2012