.. meta:: :keywords: web2py, framework, DAL, データベース抽象化レイヤ, formatオプション .. _format: formatオプションの動作 ====================== formatオプションはレコードの表示方法を指定します。このオプションの設定については :meth:`~dal.DAL.define_table` にて説明しています。 設定したformatオプションは、次の3つの状況において動作します。 以下、設定したテーブルのフィールドが、他のテーブルのフィールドから reference(参照)定義されている場合です。 1. フォーム上にレコードの選択フィールドがある場合、このオプションに設定されたフォーマットでレコード表示をします。 2. 他テーブルのフィールドにrepresent属性を付ければ、このオプションでフィールドを表示します。 3. SQLTABLEではrepresent属性を付けなくても、このオプションでフィールドを表示します。 文章で記述すると難しくなってしまいますので、この3つの動作について具体例で説明します。 説明には次の2つのテーブルを使用します。 :: db.define_table('person', Field('name'), format='%(name)s') db.define_table('dog', Field('owner_id', db.person), Field('name')) .. rubric:: 1.フォーム上での表示 dogテーブルへの登録用に次のようなSQLFORMを作成します。 :: def dog_form(): form = SQLFORM(db.dog) if form.accepts(request.vars, session): response.flash = 'form accepted' elif form.errors: response.flash = 'form has errors' else: response.flash = 'please fill out the form' return dict(form=form) フォームを実際に動かして、owner_idフィールドを見てみます。 .. image:: ../../images/web2py_dal/web2py_dal_009r.JPG 選択フィールドにはpersonテーブルのidフィールドではなく、formatで設定した内容が自動で表示されるようになります。 .. rubric:: 2.フィールドにrepresent属性を設定して表示 dogテーブルを普通に表示すると次のようになります。 :: >>> for row in db(db.dog).select(): ... print row.name, row.owner_id Masodusa 2 Tamatodu 2 Tatapapa 5 owner_idはpersonテーブルのidになります。 これをformatオプションで設定した形式で表示させるには、represent属性を使います。 :: >>> for row in db(db.dog).select(): ... print row.name, db.dog.owner_id.represent(row.owner_id) Masodusa Poduduma Tamatodu Poduduma Tatapapa Cototoda represent属性は次の形式で使用します。 :: 参照元Fieldインスタンス.represent(参照元のフィールド値) represent属性を使う理由は :ref:`represent` を参照ください。 もちろん次のように :ref:`recursive_select` や :ref:`join` を使用すれば、同じことが可能です。 :: >>> for row in db(db.dog).select(): ... print row.name, row.owner_id.name Masodusa Poduduma Tamatodu Poduduma Tatapapa Cototoda しかしformatオプションで複雑な表示設定を行っている場合など、represent属性を使うのがよいでしょう。 .. rubric:: 3.SQLTABLEでの表示 SQLTABLEを使ったリスト表示サンプルを作ってみます。 :: def dog_list(): rows = db(db.dog).select() return dict(rows=rows) 実際に動かしてみた結果は次のようになります。 .. image:: ../../images/web2py_dal/web2py_dal_010r.JPG SQLTABLEではrepresent属性で設定しなくても、formatオプションの形式で表示します。