.. meta:: :keywords: web2py, framework, DAL, データベース抽象化レイヤ, コモンフィールド .. _common_field: コモンフィールド(フィールドの継承) ==================================== 全テーブルに含まれるフィールドのリストを定義することも可能です。この機能はコモンフィールドと呼ばれており、次のように設定します。 :: db._common_fields.append(Field('is_active','boolean',default=True)) この設定以降に定義したテーブルには、コモンフィールドで指定したフィールドが追加されます。つまり、次のように記述したモデル定義(db.pyなど)では、 :: db._common_fields.append(Field('is_active','boolean',default=True)) db.define_table('person', Field('name'), format='%(name)s') db.define_table('dog', Field('owner_id', db.person), Field('name')) personとdogテーブルそれぞれに、is_active フィールドが追加されます。 フィールドのリストではなく、テーブル定義を指定することも可能です。 :: def_animal = db.Table(db, 'animal', Field('name'), Field('owner_id', db.person)) db._common_fields.append(def_animal) db.define_table('mouse') db.define_table('rat') mouseとratテーブルには、animalテーブルのnameとowner_idのフィールドが追加されます。 :ref:`auth.signature` を追加するには次のように指定します。 :: db._common_fields.append(auth.signature) これによって各テーブルで指定しなくても、この記述以降に定義するテーブルには、auth.signature の全フィールドが追加されることになります。 コモンフィールドは、 :ref:`common_filter` と同時に使用することが多いです。この場合マルチテナントのための、次のフィールドを追加するため使用されます。 :: db._common_fields.append(Field('request_tenant', default=request.env.http_host,writable=False)) request_tenant フィールドは特殊な機能を持っていますが、これはコモンフィルタで説明します。 参考: `Common fields and multi-tenancy `_ | `コモンフィールドとマルチテナント `_