Давно ничего не писал сюда. Крайне простое решение, которое часто требуется — отображение поля в зависимости от значения другого поля в вьюхе Odoo.
Чтобы достичь этого, не нужно использовать JS. Можно обойтись прекрасными возможностями Odoo — attrs. Они позволяют нам изменять поведение поля на лету.
В Odoo есть три атрибута, которые мы можем применить к полю в нашей вьюхи, основываясь на значении других полей:
- invisible,
- readonly,
- required.
Именно первый атрибут позволяеи скрывать или отображать поле при необходимости.
Пример №1
<field name="account"/> <field name="employee_id" attrs="{'invisible':[('account', '!=', 24)]}"/>
Крайне простой пример. Если поле account заполнено, и выбрали значение с id 24 (внутренние расходы), будет отображаться еще поле с выбором сотрудника.
Пример 2
Если нужна более сложная логика, то ее тоже можно реализовать.
<field name="value"/> <field name="account"/> <field name="employee_id" attrs="{'invisible':[('account', '!=', 24)]}"/> <field name="comment" attrs="{'required': ['&',('account','!=', 24),('value','>',5000)] }"/>
Поле comment будет обязательным к заполнению, если у нас не внутренние расходы (аккаунт отличается от 24) и сумма (value) больше 5000.
Пример 3
<field name="value"/> <field name="account"/> <field name="employee_id" attrs="{'invisible':[('account', '!=', 24)]}"/> <field name="comment" attrs="{'required': ['&',('account','=', 24),('value','>',5000)] , 'invisible':[('account', '!=', 24)]}"/>Условие для поля comment было изменено. Теперь, если выбрали внутренние расходы и сумма больше 5000, поле comment будет обязательное к заполнению.