第6章:基本ビュー¶
previous chapter で、Odoo が与えられたモデルのデフォルトビューを生成することができます。 実際には、デフォルトのビューは 決して ビジネスアプリケーションで受け入れられません。代わりに、少なくとも論理的な方法で様々なフィールドを整理する必要があります。
ビューは、アクションやメニューを含むXMLファイルで定義されます。ビューは、 ir.ui.view
モデルのインスタンスです。
今回の不動産モジュールでは、フィールドを論理的に整理する必要があります。
リストビューでは、名前だけではなく、もっと表示したいと思います。
フォームビューでは、フィールドをグループ化する必要があるでしょう。
検索ビューでは、名前以外の項目も検索できるようにする必要があります。具体的には、
入居可能な
物件のフィルタリングと、郵便番号(postcode)でグループ化するためのショートカットが必要です。
一覧表示¶
参照: このトピックに関連するドキュメントは、 一覧表示 にあります。
注釈
目標: このセクションの終わりには、リストビューが次のようになっているはずです。

リストビューは、リストビューとも呼ばれ、表形式でレコードを表示します。
Their root element is <list>
. The most basic version of this view simply
lists all the fields to display in the table (where each field is a column):
<list string="Tests">
<field name="name"/>
<field name="last_seen"/>
</list>
簡単な例は ここ です。
Exercise
カスタム リスト ビューを追加しましょう。
適切なXMLファイルで estate.property
モデルのリストビューを定義します。表示するフィールドについては、このセクションの 目標 を確認してください。
ヒント:
先の例にある
editable="bottom"
属性を追加しないでください。これについては後ほど説明します。一部のフィールドのラベルは、参照先に合わせて変更する必要があります。
いつものように、結果を確認するには、サーバーを再起動し (-u
オプションを忘れずに) 、ブラウザを更新する必要があります。
警告
この章ではコピーペーストを使用することが多いと思いますが、その際には各ビューで id
が一意であることを必ず確認してください。
警告
:doc:`security intro <04_securityintro>で説明されているように、ユーザーに正しいアクセス権を設定してください!
作成 ボタンは読み取り権限のみの場合は表示されません。
フォーム¶
参照: このトピックに関連するドキュメントは、 フォーム にあります。
注釈
目標: このセクションの終わりには、フォームビューが次のようになっているはずです。

フォームは、単一のレコードの作成と編集に使用されます。
ルート要素は <form>
です。高レベルの構造要素 (グループとノートブック) とインタラクティブ要素 (ボタンとフィールド) で構成されています。
<form string="Test">
<sheet>
<group>
<group>
<field name="name"/>
</group>
<group>
<field name="last_seen"/>
</group>
</group>
<notebook>
<page string="Description">
<field name="description"/>
</page>
</notebook>
</sheet>
</form>
外見を微調整するために、 div
や h1
などの通常の HTML タグと、 class
属性 (Odoo はいくつかの組み込みクラスを提供します) を使用することができます。
単純な例は こちら です。
Exercise
カスタム フォーム ビューを追加しましょう。
適切なXMLファイルで estate.property
モデルのフォームビューを定義します。ページの最終的なデザインについては、このセクションの 目標 を確認してください。
期待通りの結果が得られるまで、多少の試行錯誤が必要になるかもしれません。 ;-) 仕組みを理解するために、フィールドやタグを1つずつ追加していくことをお勧めします。
ビューに変更を加えるたびにサーバを再起動するのを避けるために、サーバを起動する際に --dev xml
パラメータを使用すると便利です。
$ ./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo -u estate --dev xml
このパラメータを使用すると、ページを更新してビューの変更を表示することができます。
検索¶
参照: このトピックに関連するドキュメントは、 検索 にあります。
注釈
目標: このセクションの終わりには、検索ビューが次のようになっているはずです。



検索ビューは、content が表示されないため、リストやフォームビューとは若干異なります。 これらは特定のモデルに適用されますが、他のビューの内容をフィルタリングするために使用されます ( 一覧表示 など一般的に集約されたビュー)。 ユースケースの違いを超えて、それらは同じ方法で定義されます。
ルート要素は <search>
です。このビューの最も基本的なバージョンは、ショートカットが必要なすべてのフィールドを単純にリストします。
<search string="Tests">
<field name="name"/>
<field name="last_seen"/>
</search>
Odooが生成するデフォルトの検索ビューは、 name
でフィルタリングするためのショートカットを提供します。ユーザーがフィルタリングする可能性のあるフィールドを追加し、検索ビューをカスタマイズすることは非常に一般的です。
Exercise
カスタム検索ビューを追加してみましょう。
適切なXMLファイルで estate.property
モデルの検索ビューを定義します。フィールドのリストについては、このセクションの 目標 の最初の画像を確認してください。
サーバーを再起動した後、指定したフィールドでフィルタリングすることができるはずです。
Search views can also contain <filter>
elements, which act as toggles for
predefined searches. Filters must have one of the following attributes:
domain
: 指定したドメインを現在の検索に追加します。context
: 現在の検索にいくつかのコンテキストを追加します。キーのgroup_by
を使用して、指定したフィールド名の結果をグループ化します。
単純な例は こちら です。
この演習を進める前に、 ドメイン
の概念を紹介する必要があります。
ドメイン¶
参考: このトピックに関連する文書は ドメインを検索 にあります。
Odooでは、ドメインはレコードの条件をコード化します。ドメインは、モデルのレコードのサブセットを選択するために使用される条件のリストです。各条件は、 フィールド名 、 演算子 、 値 の3つでセットです。指定されたフィールドが、その値に適用された演算子の条件を満たす場合、レコードもまた条件を満たします。
例えば、 Product モデルに次のようなドメインを使用すると、単価が 1000 以上の サービス がすべて選択されます。
[('product_type', '=', 'service'), ('unit_price', '>', 1000)]
デフォルトでは、条件は暗黙的にANDで結合されます。つまり、ドメインにマッチするレコードには、すべての条件が満たされている必要があります。論理演算子の &
(AND) 、 |
(OR) 、 !
(NOT) を使用して、条件を明示的に組み合わせることができます。これらの演算子は前置詞として使用されます(演算子は引数の間ではなく前に挿入されます) 。例えば、 `サービスであるか、 または 単価が1000から2000の間 でないもの ` を選択するには、次のようにします。
['|',
('product_type', '=', 'service'),
'!', '&',
('unit_price', '>=', 1000),
('unit_price', '<', 2000)]
注釈
XML does not allow <
and &
to be used inside XML
elements. To avoid parsing errors, entity references should be used:
<
for <
and &
for &
. Other entity references
(>
, '
& "
) are optional.
Example
<filter name="negative" domain="[('test_val', '<', 0)]"/>
Exercise
フィルターとグループ化を追加してみましょう。
先に作成した検索ビューに次のものを追加します。
利用可能な物件を表示するフィルタ - state は
New
またはOffer Received
とする検索結果を郵便番号でグループ化することもできるようになります。
良さそうに見えますか? この時点で、我々はすでにモデルを作成し、ビジネスを賢明にするユーザーインターフェイスを設計することができます。 しかし、 モデル間のリンク がまだありません。