他のタイプの親になる可能性のあるタイプを説明するmany2many関係を持ついくつかの組織タイプがあります(たとえば、部門はサブ部門およびワーキンググループの親になることができます)。これは厳密な階層ではないため(ワーキンググループは他のワーキンググループの親になることができます)、したがってmany2many関係です。
私のorganization_typeオブジェクトには、allowed_parent_type_ids
とその逆allowed_children_type_ids
の2つのフィールドがあります。
ここで、親に応じて組織オブジェクトの組織タイプフィールドを制限したいので、「部門」の子は、部門の子になることを許可された組織タイプのみを選択できます。
私のフォームビューで、私は試してみました:
<field
name="organization_type_id"
domain="[('id', 'in', parent_id.organization_type_id.allowed_children_ids)]"
/>
また、許可されたタイプの関連フィールドを組織オブジェクトに配置しようとしましたが、常にエラーメッセージが表示されます。私の最後の試みは:
domain=[('id', 'in', allowed_type_ids)]
それはエラーメッセージを与えます:
TypeError: not all arguments converted during string formatting
クライアントは実際に "allowed_type_ids" = [0,1,2]
のようなJSONオブジェクトをフェッチします。ドメイン式のallowed_type_idsを[0,1,2]
に置き換えると、エラーは発生せず、選択に3つの組織タイプが表示されます...
これを試して:
<field
name="organization_type_id"
domain="[('id', 'in', parent_id.organization_type_id.allowed_children_ids.ids)]"
/>
allowed_children_ids
はレコードのセット、allowed_children_ids.ids
は、それらのレコードのIDのリストです。
反対側からもアプローチできます。これは動作し、イベントが速くなるはずです:
<field
name="organization_type_id"
domain="[('allowed_parent_type_ids', '=', parent_id.organization_type_id)]"
/>
編集:私がメッセージを投稿したときでも、9.0と10.0ではこのトリックは機能しません。あなたのOdooコードベースが最新である場合は を参照してくださいhttps://github.com/odoo/odoo詳細については、/ issues/16072 をご覧ください。
別の方法として、web_domain_fieldモジュールを試すことができます。それは現在ここにあります: https://github.com/OCA/web/pull/567
以前の答え:
Many2manyにドメインを設定するには、Odoo FAQのOlivier Donyからの良い答えが見つかります: https://www.odoo.com/fr_FR/forum/aide-1/question/ complex-many2many-domains-in-views-41777#answer_41784
つまり、Many2many値は[(6, 0, ids)]
のようなタプルのリストであるため、正しい値に対処する必要があります。
したがって、IDを比較するには、次のようなドメインを作成する必要があります。
domain=[('id', 'in', allowed_type_ids[0][2])]
警告、many2manyフィールドが空の場合、これはOdoo 9.0では機能しない可能性があります。