ノーコードで項目を追加する — Odoo Community でできること・できないこと
画面の上で項目をドラッグして足す Studio は Enterprise 側の道具です。Odoo 19 Community で「プロパティ」「開発者モードの x_ 項目」「アドオン」の3つを実際に試し、どこまで画面だけで足せるかを数えました。
目次
目次
このページには目次がありません

製造オーダに図面番号を持たせたい。受注に「検査の要否」を付けたい。運用を始めると、項目を1つ2つ足したい場面は必ず出てきます。
Odoo でこれを画面の上で行う道具は Studio ですが、Studio は Enterprise 側の機能です。Odoo 19 の Community(公式の配布物・692 個のモジュール)には入っていません。では Community ではどこまでできるのか。捨てる用の DB で、次の3つを実際に試しました。
| 足し方 | 開発者モード | 向いている場面 |
|---|---|---|
| プロパティ | 要らない | 顧客・商品などに、メモ代わりの項目を足す |
| 開発者モードの x_ 項目 | 要る | 製造オーダなど、どの画面にも項目を足す |
| アドオン | (コードで書く) | 入力のチェック・計算・複数の環境に同じ物を配る |
1. プロパティ:開発者モードなしで足せる
顧客のフォームの歯車のメニューに「プロパティを編集」があります。ここから、ラベルと型を決めるだけで項目が1つ増えます。
Odoo 19 Community の顧客のフォーム(画面は見本のデータです)
選べる型は、テキスト・整数・日付・選択・タグ・Many2one など 13 種類です。足したプロパティは、ほかの顧客のフォームにも同じ位置に出ます。
ただし、プロパティの欄を持っているのは 11 のモデルだけでした。顧客・利用者・商品・ロット・入出庫・商談・従業員・設備などです。製造オーダや受注には無いので、ここには足せません。また、プロパティの値は1つの列にまとめて保存されるため、帳票や集計で普通の項目と同じように使えるとは限りません(今回は試していません)。
2. 開発者モードで x_ の項目を作る
プロパティが無い画面には、開発者モード(URL の末尾に ?debug=1)で項目を作ります。「設定 › 技術設定 › フィールド」で新規を押し、名前・ラベル・モデル・型を決めます。
項目の名前は x_ で始まります(画面は見本のデータです)
型は 19 種類から選べます。選択の型なら、下の表に値を並べます。
必須・読み取り専用・インデックス・複製の対象も、ここで決めます(画面は見本のデータです)
作っただけでは画面に出ない
保存しても、製造オーダのフォームには何も増えていません。開発者モードのメニュー(虫のアイコン)を開いても、「項目を画面に足す」という操作はありませんでした。フォームに出すには、ビューを継承して XML を書く必要があります。
「設定 › 技術設定 › ビュー」で新規を押し、継承元に製造オーダのフォーム(mrp.production.form)を選んで、次の数行を書きます。
<data>
<xpath expr="//field[@name='user_id']" position="after">
<field name="x_drawing_no"/>
<field name="x_inspection"/>
</xpath>
</data>
「ビュー継承モード」を「拡張表示」にします(画面は見本のデータです)
ここで1つ詰まりました。新規の継承ビューは「基本表示」で作られ、そのままだと製造オーダのフォームに項目が出ません。「拡張表示」に変えて保存し直すと、担当者の下に2つの項目が並びました。
製造オーダのフォームの担当者の下に、足した2つの項目が出ます(画面は見本のデータです)
足した項目は、製造オーダの一覧のグループ分けにもそのまま使えました。
モジュールを更新しても残るか
製造のモジュールを更新(-u mrp)して確かめました。
| 足した物 | 更新の後 |
|---|---|
| x_ の項目(2 つの項目)と入れた値 | 残った |
| 継承ビュー | 残った |
| 標準のフォームのビューを直接書き換えた分 | 消えた |
Odoo のビューの画面にも「標準ビューのアーキテクチャを編集することはお勧めしません」と出ます。開発者モードのメニューから標準のビューを開いて書き換えると、モジュールの更新で元に戻ります。足すときは必ず継承ビューを作ります。
もう1つ、ビューで使っている項目は消せません。消そうとすると、ビューに残っている項目は消せないというエラーで止まりました。先に継承ビューを消してから項目を消します。
3. アドオンで足す
画面だけでは足りないのは、次のような場面です。
- 「全数検査なら図面番号が必須」のような、項目どうしの入力のチェック
- 重複を許さない番号(項目の画面に、重複を禁じる欄はありません)
- 試験用の DB と本番の DB に同じ物を確実に配る、変えた履歴を残す
同じ2つの項目を、小さなアドオン(jp_demo_customfield)で足して確かめました。画面で作る項目は名前が x_ で始まる決まりですが、アドオンで足す項目には使わず、jp_drawing_no・jp_inspection としています。
from odoo import api, fields, models
from odoo.exceptions import ValidationError
class MrpProduction(models.Model):
_inherit = "mrp.production"
jp_drawing_no = fields.Char(string="図面番号", index=True, copy=False)
jp_inspection = fields.Selection(
[("full", "全数"), ("sample", "抜取り"), ("none", "不要")],
string="検査区分", default="sample",
)
# 図面番号の重複を許さない(Odoo 19 の書き方)
_jp_drawing_no_uniq = models.Constraint(
"unique(jp_drawing_no)",
"同じ図面番号の製造オーダが既にあります。",
)
@api.constrains("jp_inspection", "jp_drawing_no")
def _check_jp_drawing_no(self):
for mo in self:
if mo.jp_inspection == "full" and not mo.jp_drawing_no:
raise ValidationError("全数検査の製造オーダには図面番号を入れてください。")
図面番号が空のまま「全数」で保存しようとすると、検証エラーで止まります(画面は見本のデータです)
フォームへの表示は、上と同じ形の継承ビューをアドオンの XML に書きます(項目の名前は jp_drawing_no・jp_inspection)。重複を禁じる models.Constraint の行は、配布物の製造オーダ(mrp_production.py)と同じ書き方に合わせた物で、今回の DB では試していません。
アドオンの作り方は「本格拡張はアドオンで — Odoo の拡張開発の基本」にまとめています。アドオンを外すと、そのアドオンが足した項目の列とデータは消えます。残したい項目は、外さないアドオンの側に持たせます。
できること・できないこと
| やりたいこと | Community の画面だけで |
|---|---|
| 顧客・商品などに項目を足す | できる(プロパティ) |
| 製造オーダ・受注などに項目を足す | できる(x_ 項目+継承ビューの XML) |
| 必須・読み取り専用・選択肢 | できる |
| 項目をドラッグして並べる | できない(Studio・Enterprise) |
| 項目どうしの入力のチェック | 項目の画面に設定の欄が無い(アドオンで書く) |
| 試験と本番に同じ物を配る | 手で同じ操作を繰り返すことになる(アドオンなら1回) |
画面だけでも、少し XML を書けば項目は足せます。ただ、足した物が増えるほど「どの DB に何を足したか」がわからなくなります。当社は、お客様ごとに足す項目もアドオンにまとめ、版上げのたびに同じ手順で移せる形で用意します。版上げで壊さないための決まりは「アップデートしても壊れない — Odoo の拡張の作り方」にあります。





