次のように、db モデルに計算フィールドがあります。
Field('computed_field', compute=lambda(page): compute_this_field(page)),
私が最近発見したのは、計算は、更新呼び出し中に変更されたページのフィールドのみを渡すことです。私の関数 compute_this_field が計算を完了するために他のフィールドを必要とする場合、それらを取得しません。
この制限を回避する最善の方法は何ですか?
次のように、db モデルに計算フィールドがあります。
Field('computed_field', compute=lambda(page): compute_this_field(page)),
私が最近発見したのは、計算は、更新呼び出し中に変更されたページのフィールドのみを渡すことです。私の関数 compute_this_field が計算を完了するために他のフィールドを必要とする場合、それらを取得しません。
この制限を回避する最善の方法は何ですか?
問題は、複数のレコードを更新していて、レコードが更新されていないフィールドに同じ値を持っていない場合、更新されたすべてのレコードに対して単一の計算値を計算する方法がないことです。独自の計算値であり、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()
メソッドに渡します。