NDBのComputedProperty関数からリストを返す回避策
質問
私は自分のアプリを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)