web-dev-qa-db-ja.com

Odoo 8:Many2manyドメインフィルター

他のタイプの親になる可能性のあるタイプを説明する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つの組織タイプが表示されます...

15
cgs

これを試して:

<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)]"
    />
8
Ludwik Trammer

編集:私がメッセージを投稿したときでも、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では機能しない可能性があります。

5
Yannick