odooドメインの詳しい説明

1. ドメイン表現のルール

最も単純な形式: [('フィールド名','演算子',値)]
例: [('shenqr.user_id','=',uid)]

フィールド名

Many2one/Many2Many/One2many フィールドの場合は、「.」を使用して、次のように対応する属性を抽出できます: ('create_uid.company_id.parent_id','=', user.company_id.id)

オペレーター

オペレーター 説明する
=,>.<,>=,<=,!= 比較演算、等しい、等しくない、以上、以上、未満、以下
好き あいまい一致、%value% による一致
=いいね パターン マッチング、アンダースコア - 1 文字と一致、パーセント記号 % は 0 個以上の文字と一致します。
好き 似ていますが、大文字と小文字は区別しません
= 好き =like と似ていますが、大文字と小文字は区別されません
みたいではなく %value% と一致しません
好きじゃない 「好きではない」と似ていますが、大文字と小文字は区別されません
=? 設定されていない、または等しい、設定されていないとは、値が None または False の場合、残りは = と同じであることを意味します。
値が要素のリストにあるかどうかを判断します
ありませんで 値が要素のリストに存在しなくなったかどうかを確認します。
の子 値がサブレコードであるかどうかを判断し、[(A,'child_of',A)] は true を返します。

主に child_of について説明します。

[('create_uid.company_id','child_of',[user.company_id.id])]

に相当

['|',('create_uid.company_id','=',[user.company_id.id]),('create_uid.company_id.parent_id','=',[user.company_id.id])]

価値

文字列、True または False、数値などが含まれます。

xmlでは、現在ログインしているユーザーのユーザーオブジェクトを取り出すことができ、user.id、user.company_id.idなどを取り出すことができます。

条件間のロジック

シンボル 説明する
& また、記号以降の 2 つの条件が同時に満たされることを意味し、デフォルトの関係は省略できます
または、以下の2つの条件のいずれかを満たしていることを意味します。
いいえ、後者の条件を逆にします。True の場合、False になります。

Odoo はポーランド語表記法を使用していますが、ポーランド語表記法とは簡単に言うと、演算子をオペランドの前に置き、括弧なしでも式を曖昧さなく解析できる方法です。#### ポーランド語表記での演算の順序####
二項演算を例にとると、式は左から右に読まれます。演算子の後に 2 つのオペランドが続く場合、計算され、結果は次のようになります。両方のオペランドをオペランドとして使用し、すべての演算子が処理されるまで繰り返します。

['|','&','|',a,b,c,'&',d,e] ここで、
a、b、c、e、f、g は論理演算子のない式です。演算の順序は式:

['|','&','|',a,b,c,'&',d,e]

['|','&',(a | b),c,'&',d,e]

['|',((a | b) & c),'&',d,e]

['|',((a | b) & c),(d & e)]

[(((a | b) | c) | (d & e))]

逆に、この効果を実現したい場合は、

A and (B or C) and D and E

最初に内側から開始するか、事前に置きます

A and (or B C) and D and E

内側に入れてあらかじめ金具を外しておきます

and A or B C and D E

したがって、最終的なドメインは次のように書くことができます

A, '|', B, C, D, E

2. ドメインの利用シナリオ

1. 関連フィールド

(Many2one/One2many/Many2many) 異なる選択結果をフィルタリングします。

account_id = fields.Many2one('account.account', string='Default Debit Account', domain=[('active', '=', False)])

2. 表示したいフィールドをフィルターで除外します。

ir.actions.act_windon にドメインを追加すると、このアクションがどこかで呼び出されたときに、ドメイン条件を満たすレコードのみが表示されます

<record id="relate_partner_opportunities" model="ir.actions.act_window">
<field name="name">Opportunities</field>
<field name="res_model">crm.lead</field>
<field name="view_mode">kanban,tree,form,graph,calendar</field>
<field name="domain">[('type','=','opportunity')]</field>
<field name="context">{
    
    
    'search_default_partner_id': active_id,
    'default_type': 'opportunity'
}</field>
<field name="view_id" eval="False"/>
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
</record>

3. 権限フィルタリング

<record id="account_move_comp_rule" model="ir.rule">
<field name="name">Account Entry</field>
<field name="model_id" ref="model_account_move"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>

4. 検索フィルター

 <record id="view_crossovered_budget_search" model="ir.ui.view">
 <field name="name">crossovered.budget.search</field>
 <field name="model">crossovered.budget</field>
  <field name="arch" type="xml">
   <search string="Budget">
        <field name="name" filter_domain="[('name','ilike',self)]" string="Budget"/>
        <field name="date_from"/>
        <field name="date_to"/>
        <filter string="Draft" domain="[('state','=','draft')]" help="Draft Budgets"/>
        <filter string="To Approve" domain="[('state','=','confirm')]" help="To Approve Budgets" />
        <field name="state"/>
    </search>
</field>
</record>

おすすめ

転載: blog.csdn.net/iuv_li/article/details/126302129