Кросс-браузерное решение без манипуляций с DOM, приведенное выше, не работает, потому что оно дает первое правило соответствия, а не последнее. Последнее правило сопоставления является тем, которое применяется. Вот рабочая версия:
function getStyleRuleValue(style, selector) {
let value = null;
for (let i = 0; i < document.styleSheets.length; i++) {
const mysheet = document.styleSheets[i];
const myrules = mysheet.cssRules ? mysheet.cssRules : mysheet.rules;
for (let j = 0; j < myrules.length; j++) {
if (myrules[j].selectorText &&
myrules[j].selectorText.toLowerCase() === selector) {
value = myrules[j].style[style];
}
}
}
return value;
}
Однако этот простой поиск не будет работать в случае сложных селекторов.
В ОСА-репозиториях есть хороший модуль сообщества под названием «Массовое редактирование» . Вы можете действительно легко создавать массовые действия редактирования для бизнес-объектов, таких как сотрудники, и просто активировать их для меню действий («Больше» в Odoo V8).
Другим решением является создание серверного действия с кодом Python. Действия сервера можно активировать и для меню действий (в правом углу действия сервера odoo V8 есть кнопка). Но вам понадобятся два действия, где первое решение работает с одним действием.
Код для действий этого сервера действительно прост:
obj.browse(env.context.get('active_ids')).write({'my_field': my_value})
Очевидно, что вы должны написать в поле выбора, и значение для одного действия сервера равно «Присутствует» и «Отсутствует» для другого.
Действия сервера можно найти в меню «Настройки» / «Техника» / «Действия» / «Действия сервера».