1

次のように、db モデルに計算フィールドがあります。

Field('computed_field', compute=lambda(page): compute_this_field(page)),

私が最近発見したのは、計算は、更新呼び出し中に変更されたページのフィールドのみを渡すことです。私の関数 compute_this_field が計算を完了するために他のフィールドを必要とする場合、それらを取得しません。

この制限を回避する最善の方法は何ですか?

4

1 に答える 1

1

問題は、複数のレコードを更新していて、レコードが更新されていないフィールドに同じ値を持っていない場合、更新されたすべてのレコードに対して単一の計算値を計算する方法がないことです。独自の計算値であり、1 回の更新では処理できませんでした。計算された値を更新したい場合は、計算に必要なすべての値を渡す必要があります (一部が変更されていない場合でも)。これを行う 1 つの方法は次のとおりです。

query = db.mytable.id == [some id]
row = db(query).select().first()
row.update(field1=newvalue1)
db(query).update(**row.as_dict())

上記は、最初に単一のレコード (つまり、Rowオブジェクト) を抽出し、オブジェクトに変更を加えてから、Rowオブジェクト全体Row(すべてのフィールドを含む) を.update()メソッドに渡します。

于 2013-04-12T21:19:29.647 に答える