.. meta:: :keywords: web2py, framework, DAL, データベース抽象化レイヤ, compute .. _compute: compute ======= フィールドの書き込み時に動作するオプションです。これは :ref:`class_field` クラスのコンストラクタに設定します。 computeオプションに関数を設定することによりレコード挿入時や更新時に、他のフィールド値などから計算した結果をフィールドに格納します。 このフィールドの典型的な利用方法として次の2点が挙げられます。 * データ加工処理の負荷を軽減するため、HTMLタグなどの処理を予めしておきます。 * 検索処理の負荷を軽減するため、簡単に検索可能な値に予め処理をしておきます。 具体的なサンプルを見ていきましょう。 :: db.define_table('inventory', Field('item'), Field('actual','decimal(10,2)'), Field('reserved','decimal(10,2)'), Field('free','decimal(10,2)',compute=lambda r : r['actual'] - r['reserved'])) テーブル定義で、フィールドfreeのcomputeオプションに無名関数(lambda)を登録しています。これは他のフィールド値を元に 無名関数が値を算出して、算出した値をフィールドに格納します。。 次に定義したテーブルを使ったサンプルを示します。 :: >>> row = db.inventory.insert(item=1,actual=150,reserved=35) >>> print row.free 115.00 actualとreservedから計算した値が、freeに保存されているのがわかります。