web-dev-qa-db-ja.com

Odoo:フィールドの条件付き非表示属性は一方向でのみ機能しますか?

Odooフォームビューで条件付きでフィールドを非表示にしようとしています。 「販売可能」がチェックされている場合==>「プロダクトマネージャー」は非表示になっている必要があります。

enter image description here

enter image description here

製品フォームの継承されたビューのドメインで属性「invisible」を使用してみました。

<record model="ir.ui.view" id="product_template_form_inherit">
    <field name="name">product.template.product.form</field>
    <field name="model">product.template</field>
    <field name="inherit_id" ref="product.product_template_only_form_view" />
    <field name="Arch" type="xml">
        <field name="product_manager"  position="attributes">
                    <attribute name="invisible">[('sale_ok', '=', True)]</attribute>
        </field>    
</field>
</record>

フィールドsale_okがtrueの場合、product_managerフィールドは実際には非表示になっています。ただし、フィールドsale_okが再びfalseになるとフィールドproduct_managerは非表示のままになります

私も代わりにこれを試しました:

<field name="product_manager" attrs="{'invisible': [('sale_ok', '=', True)]}"/>

これも機能しません。

私は次のような他のドメインも試しました:

[('sale_ok', '==', True)]
[('sale_ok', '!=', False)]
[('sale_ok', '=', 'True')]

ここで何が問題なのかよくわかりません...チェックされていないときに表示されないようにするにはどうすればよいですか?

私が最終的に求めているのは、次のことです。チェックボックスをオンにすると、フォームは保存せずにすぐに変更されます。フィールドを追加および削除する必要があります。それは可能ですか?

編集:

ChesuCRの回答で、プロダクトマネージャーを非表示/再表示できるようになりました。ただし、「loc_rack」(保管場所==>ラック)で同じことを試みると、エラーが発生します。

Field(s) `Arch` failed against a constraint: Invalid view definition

Error details:
Element '<field name="loc_rack">' cannot be located in parent view

これは私が使用したコードです:

<field name="loc_rack"  position="replace">
    <field name="loc_rack" attrs="{'invisible': [('sale_ok', '=', True)]}"/>
</field>

このフィールドで同じことができないのはなぜですか?

7
RobbeM

これは私にはうまくいきます

<record id="custom_product_template_form_view" model="ir.ui.view">
    <field name="name">custom.product.template.form</field>
    <field name="model">product.template</field>
    <field name="inherit_id" ref="product.product_template_form_view" />
    <field name="Arch" type="xml">
        <field name="product_manager"  position="replace">
            <field name="product_manager" attrs="{'invisible': [('sale_ok', '=', True)]}"/>
        </field>
    </field>  
</record>

問題が見つかった場合は、「federico」の回答を試して、attrs属性を変更するだけです。私のソリューションは、他の属性が元のフォームにすでに存在する場合、それらを変更または削除する可能性があります。

6
ChesuCR

ただし、postion="replace"を使用すると問題が発生する可能性があるため、position="attributes"を使用するのが最善の方法です。

インストールされている他のモジュール(名前付きモジュールX)が置き換えているタグを継承していると想像してください。その後、Odooシステムを更新すると、モジュールXが置き換えたタグを見つけられないため、クラッシュします。

次のコードは私にとって完璧に機能します。

<field name="product_manager"  position="attributes">
    <attribute name="attrs">{'invisible': [('sale_ok', '=', True)]}</attribute>
</field>
4
federico