2.3. テーブルの継承¶
web2pyではテーブルの継承を使って、テーブル定義することが可能です。
テーブル定義の中に他のテーブルを指定することによって、そのテーブルのフィールド定義を含んだテーブルが作成できます。
サンプルを示してみます。
>>> db.define_table('animal', Field('name'))
>>> db.define_table('mouse', db.animal, Field('owner_id', db.person))
animal テーブルを継承して、mouseテーブルを作成しています。mouse テーブルには、nameフィールドとowner_idフィールドが設定されます。
この他、雛形となるテーブルはデータベースには作成しないで、雛形テーブルを継承したテーブルだけ作成する設定も可能です。
>>> def_animal = db.Table(db, 'animal', Field('name'))
>>> db.define_table('mouse', def_animal, Field('owner_id', db.person))
def_animal変数には、Tableインスタンスを生成して設定しています。それをmouseテーブル定義時に指定します。 animalテーブルはデータベースには作成されないですが、mouseテーブルは作成されます。
バリデータも継承したい場合は、テーブル継承の定義の前に、継承するテーブルのバリデータを定義することが必要です。
参考: Table Inheritance | テーブル継承
2.3.1. auth.signature¶
同様の定義は、Authでも特定の目的のために定義されています。
auth = Auth(db)
db.define_table('person', Field('name'), auth.signature)
これはテーブルに次のフィールド定義を付加します。
Field('is_active','boolean',default=True),
Field('created_on','datetime',
default=request.now,
writable=False,readable=False),
Field('created_by',
reference_user,
default=lazy_user,represent=represent,
writable=False,readable=False,
),
Field('modified_on','datetime',
update=request.now,default=request.now,
writable=False,readable=False),
Field('modified_by',
reference_user,represent=represent,
default=lazy_user,update=lazy_user,
writable=False,readable=False)
レコードの有効性・作成日時・作成者・変更日時・変更者といったフィールドを、テーブルに追加します。