我正在将我的应用程序转换为使用 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.

我可以在 ext.ndb 的 model.py 中看到 ComputedProperty 继承自 GenericProperty,其中在 _db_set_value 中有几个 if/else 语句根据其类型处理值,除了没有处理 lists
目前它通过第一个条件并在我返回空列表时发出该错误。

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

最佳答案

您需要在 NDB 中为您的计算属性设置重复=真标志。我不认为你可以使用可爱的“@db.ComputedProperty”符号,你必须说:

def _computeValue(self):
    ...same as before...
someComputedProperty = ComputedProperty(_computeValue, repeated=True, indexed=False)

关于python - 从 NDB 中的 ComputedProperty 函数返回列表的解决方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8893886/

10-10 09:21