I've been for a long time looking for a solution for that, and I've ended creating my own. It's a little of a hack but works perfectly for colouring the field's backgrounds depending on other fields values.
First I add a new meaningful class name to my field, for example 'opt_required', and use in it the odoo's built-in colouring functionality, I'll chose 'decoration-warning'
<field name="custom_field" class="opt_required" decoration-warning="company_name == 'Elektrolux'"/>
After that, in my custom css file I add the next code. The decoration-warning will trigger the .text-warning class in the case the conditional is met, otherwise the input-field won't have that class. So the next piece of css code will only work if the input has either the .text-warning class and the opt_required class, and our field will have happily its background colour :)
input.opt_required.text-warning{
background-color: #D2D2FF !important;
color: rgb(31, 31, 31) !important; /*We don't want the text to actually have the warning color, so we keep it the usual*/
}
Take care of adding your css file to the assets as usual, for instance like this:
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template id="assets_backend" name="Technical Service Assets" inherit_id="web.assets_backend">
<xpath expr="//link[last()]" position="after">
<link rel="stylesheet" href="technical_service/static/src/css/styles.css"/>
</xpath>
</template>
</odoo>
And after to the __manifest__.py
'data': [
'views/my_custom_assets.xml',
],
'css': ['static/src/css/styles.css'],
Then you just need to upgrade your module, and your fields will start working as you desired.
you want only field name="to_pay" color or all fields color.
I've updated the question.