uploadタイプだが、このタイプのフィールドに値がセットされているかどうかチェックするのは少し複雑だ。よいのだが更新登録も考えると、これだけのロジックが必要になる。2つのフィールドの値をチェックできるようになったが、どうもユーザインターフェースが分かりにくいと思わないだろうか?。画面の説明をすれば理解してもらえると思うが、直感的ではない。どちらかに選んでもらうようにする。選んだ方の入力値をチェックすると共に、選ばれなかった方のフィールド値を削除するように仕様変更する。ラジオボタンのフィールドはモデル定義でテーブルに追加するのが一番簡単なのだが、画面ロジック用のフィールドをテーブルに追加するのは抵抗がある。今回はモデル定義を変更せず、ラジオボタンを追加してみたい。改善したサンプルソースを示してみる。dict(form=form)2012/10/09onvalidationの設定後にフィールドを挿入していたため、チェック関数が正常に動作していませんでした。このためフィールド挿入後、processメソッドを呼び出すようにコード変更を行いました。次に実行した画面イメージも示す。check_image関数は仕様変更通り、ラジオボタンで選択していないフィールドの値をクリアする様に変更した。関数については以下、簡単に解説する。radio変数にセットしている(9行目)。ラジオボタンのラベルは、label変数にセットしている(8行目)。これらの部品をテーブルにセット(17行目)し、さらにそのテーブルをフォームに代入している(23行目)。これは既存のフォーム部品と同じ構成にするためだ。挿入位置はフォームの下部の部品から数えて挿入していくため、新規登録と更新登録では挿入位置が一つずれる。このためレコードが存在するかどうかで、判定し調整を行なっている(15行目)。今までの更新処理では、SQLFORMコンストラクタの第二パラメータにID番号を渡していた。更新登録かどうかを判定するため、Rowオブジェクトを取り出しているので、そのままSQLFORMコンストラクタに渡している(21行目)。これによって、一つ、DBアクセスを削減している。利用ラジオボタンの追加で、画面は分かり易くなった。使って、選択しない方のフィールドを隠すようにしてみたい。サンプルコードを示す。関数を改造して、JavaScriptコードを追加しているだけだ。dict(form=form)2012/10/09onvalidationの設定後にフィールドを挿入していたため、チェック関数が正常に動作していませんでした。このためフィールド挿入後、processメソッドを呼び出すようにコード変更を行いました。実行すると画面イメージは次のようになる。ラジオボタンを選択することにより、項目が消えたり・現れたりする。と2つの変数に設定している。イベントハンドラに設定している(19及び22行目)。コードを動かすものだ。コードの最後に付け足している(34行目)。これにより、ページのロードが完了した時点で自動的に動作する。今回の記事はここまでです。SQLFORMのカスタマイズ例を説明してみました。SQLFORMは他にもいろいろな機能があります。フォームとバリデータまだ次回に続く予定です。使ったカスタマイズを説明していきたいと思います。