Рубрики
Software

Odoo: отображение полей в view в зависимости от значения другого поля

Давно ничего не писал сюда. Крайне простое решение, которое часто требуется — отображение поля в зависимости от значения другого поля в вьюхе 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 будет обязательное к заполнению.

Также читайте о том, как убрать возможность создавать товары в Odoo.