解决方法从NDB中的ComputedProperty函数返回列表

Moh*_*mis 4 python google-app-engine python-2.7 app-engine-ndb google-cloud-datastore

我正在转换我的应用程序以使用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) 
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我生成列表的方法有点复杂,我更喜欢这样做.但是当我开始转换为NDB时,我只是替换了@db.ComputedProperty,@model.ComputedProperty但后来我收到了这个错误:

NotImplementedError: Property someComputedProperty does not support <type 'list'> types.
Run Code Online (Sandbox Code Playgroud)

我可以model.py在ext.ndb中看到ComputedProperty继承自GenericProperty哪里_db_set_value有几个if/else语句根据其类型处理值,除了没有处理lists

目前它经历了第一个条件,并在返回空列表时发出错误.

有没有办法解决这个问题并避免错误?

Gui*_*sum 13

您需要在NDB中为计算属性设置repeated = True标志.我不认为你可以使用可爱的"@ db.ComputedProperty"表示法,你不得不说:

def _computeValue(self):
    ...same as before...
someComputedProperty = ComputedProperty(_computeValue, repeated=True, indexed=False)
Run Code Online (Sandbox Code Playgroud)