Обработка нулевых значений в поле выбора в Odoo

Обработка нулевых значений в поле выбора в Odoo

swe-notes.ru


Недавно нактнулся на интересную особенность Odoo, которая касается поля типа Selection. Она заключается в том, что если в списке есть значение с ключом 0, то при выводе оно зануляется. Например, есть поле:


Так вот это поле при нахождении в таблице БД 0 в столбце status, в интерфейс выведет пустое значение, не строку "Начало".


Такое поведение было для меня слегка неожиданным, но я подумал что оно связано с особенностью python и я полез смотреть исходники класса fields.Selection.


Оказалось там есть 2 интересных функции:

- convert_to_read - отвечает за отображение значения поля при выполнении у модели метода read.

- convert_to_column - отвечает за преобразование значения в sql формат при вызове у модели метода write.


Надо отметить что такие функции есть и у других типов полей не только Selection.


Код convert_to_read:

В этой функции проблема в том, что при 0 значение value приходит None (так как значение 0 при чтении из БД интерпретируется в None из-за особенностей python), и поэтому возвращается False, а не значение 0.


Вторая проблема, по сути, аналогична и содержится в коде convert_to_column:


Как можно заметить тут проверяется значение на пустоту, и если его нет, то возвращается пустота и в БД идет значение NULL.

Если переопределить эти функции как показано ниже, то проблема c 0 будет решена:

Источник

Report Page