これを解決した方法は、SQLFORM.factory
の代わりに使用することでしSQLFORM
た。
1.テーブルで定義されたフィールドを抽出しました
fields = [field for field in db.customer]
2.私が欲しかった新しいフィールドを追加しました
fields += [
Field('customer_type','string', label=T('Customer Type'),
requires=IS_IN_SET(customer_types, zero=None, sort=False)),
Field('another_field','string', label=T('Another Field')),
]
3. SQLFORM.factory を使用してフォームを生成する
form = SQLFORM.factory(
*fields,
formstyle='bootstrap',
_class='customer form-horizontal',
table_name='customer'
)
* 前のアスタリスクfields
が必要であることに注意してください
4.まだ使用されてform.process().accepted
いますが、必要なものを計算し、データベースの挿入を手動で処理しました
if form.process().accepted:
...
form.vars.some_nonwritable_field = calculate_complicated_value()
db.customer.insert(**db.customer._filter_fields(form.vars))
...
_filter_fields
動的に追加されたフィールドが挿入の一部になるのを防ぎます。
このようにして、検証されたが挿入の一部ではないフォームに追加のフィールドを追加できました。