質問

私は自分のアプリを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

現在、最初の条件を通過し、空のリストを返すとそのエラーが発生します。

これを回避してエラーを回避する方法はありますか?

役に立ちましたか?

解決 2

この機能全体は関数内で行うことができるので、関数である必要はありません ComputedProperty.計算されたプロパティは、クエリを実行する可能性のある計算を行う場合にのみ使用します。A ComputedProperty そのを持つことができます indexed に設定されたフラグ False しかし、これはあなたがそれを照会することはないことを意味し、したがって実際にそれをプロパティとして持つ必要はありません。

def someComputedProperty(self):
  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で計算されたプロパティにrepeated=Trueフラグを設定する必要があります。私はあなたがかわいい"@db"を使うことができないと思います。ComputedProperty"表記法、あなたは言わなければならないでしょう:

def _computeValue(self):
    ...same as before...
someComputedProperty = ComputedProperty(_computeValue, repeated=True, indexed=False)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top