Odoo: условный невидимый атрибут для полей работает только в одном направлении?

Я пытаюсь сделать поле невидимым при условии в представлении формы Odoo. Когда отмечен "Можно продать" ==> "Менеджер по продукту" должен быть невидимым:

введите описание изображения здесь

введите описание изображения здесь

Я пробовал использовать атрибут «невидимый» с доменом в унаследованном представлении формы товаров:

<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 истинно, поле product_manager фактически скрыто. Но когда поле sale_ok снова становится ложным, поле product_manager остается скрытым.

Я также попробовал это вместо этого:

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

Это тоже не работает.

Я также пробовал другие домены, например:

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

Не совсем уверен, что здесь не так ... Как сделать это (не) видимым, когда (не) отмечен?

В конечном итоге я добиваюсь следующего: когда установлен флажок, форма должна немедленно измениться без сохранения. Поля нужно добавлять и удалять. Это возможно?

Изменить:

Теперь я могу скрыть / показать менеджера по продукту с ответом ChesuCR. Однако, когда я пробую то же самое с "loc_rack" (Storage Location ==> 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>

Почему я не могу сделать то же самое с этим полем?


person RobbeM    schedule 28.08.2015    source источник


Ответы (2)


Это хорошо работает для меня

<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. Мое решение может изменять или удалять другие атрибуты, если они уже существуют в исходной форме.

person ChesuCR    schedule 28.08.2015
comment
Отлично работает! Ошибка была в атрибуте position =. Должен был быть заменен, как ты. - person RobbeM; 28.08.2015
comment
Еще один вопрос. Это работает для product_manager, но когда я пробую это с loc_rack, это не работает? Я отредактировал свой OP. - person RobbeM; 28.08.2015
comment
Убедитесь, что вы наследуете правильный вид. Что у вас в поле inherit_id? - person ChesuCR; 28.08.2015
comment
loc_rack находится в обзоре stock.view_template_property_form - person ChesuCR; 28.08.2015

Использование position="replace" может вызвать проблемы, лучший вариант - использовать position="attributes"

Представьте, что другой установленный модуль (с именем module X) наследует тег, который вы заменяете. Когда вы обновляете свою систему Odoo, она вылетает, потому что модуль X не может найти тег, который вы заменили.

Этот код отлично работает для меня:

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