Условное форматирование вида формы Odoo

Я хочу добиться следующего сценария. Пробовали разными способами, но безрезультатно.

<t t-if = "q1_percent &gt; 75">
    <td style = "background-color:#52be80"><field name = "q1_percent" nolabel = "1"/></td>
</t>
<t t-elif = "'q1_percent' &gt; 50 and 'q1_percent' &lt; 75">
    <td class = "td_act" style = "background-color:#f4d03f"><field name = "q1_percent" nolabel = "1"/></td>
</t>
<t t-elif = "'q1_percent' &lt; 50">
    <td class = "td_act" style = "background-color:#e74c3c"><field name = "q1_percent" nolabel = "1"/></td>
</t>

Я использую odoo 10. И приведенный выше код предназначен для просмотра формы.

Как я могу этого добиться? Любые идеи, любая помощь приветствуется. Спасибо!

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
0
186
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

До Odoo 12 существует разница между обычным представлением (дерево, форма и т. д.) и представлением QWeb, означающее, что обычные представления нельзя смешивать с содержимым QWeb для оценки как для отчетов и страниц веб-сайта.

Вы по-прежнему можете получить то, что ищете, просто определив вычисляемое поле HTML, которое будет содержать результат HTML для оценки этого кода QWeb или напрямую построить HTML без использования QWeb вообще. Или без QWeb, просто сгенерировав HTML самостоятельно.

Например:

from lxml import etree

q1_percent_html = fields.HTML("Q1 Percent HTML", compute='_compute_q1_percent_html')

@api.depends('q1_percent')
def _compute_q1_percent_html(self):
    for elem in self:
        # QWeb version
        t = etree.fromstring("""
            <div>
                <t t-if = "q1_percent &gt; 75">
                    <td style = "background-color:#52be80"><t t-esc = "q1_percent"/></td>
                </t>
                <t t-elif = "'q1_percent' &gt; 50 and 'q1_percent' &lt; 75">
                    <td class = "td_act" style = "background-color:#f4d03f"><t t-esc = "q1_percent"/></td>
                </t>
                <t t-elif = "'q1_percent' &lt; 50">
                    <td class = "td_act" style = "background-color:#e74c3c"><t t-esc = "q1_percent"/></td>
                </t>
            <div>
        """)
        elem.q1_percent_html = self.env['ir.qweb'].render(t, {'q1_percent': elem.q1_percent})

        # Python direct version
        if elem.q1_percent >= 75:
            background_color = "#52be80"
        elif elem.q1_percent >= 50 and elem.q1_percent <= 75:
            background_color = "#f4d03f"
        elif elem.q1_percent <= 50:
            background_color = "#e74c3c"
        elem.q1_percent_html = """<div><td style = "background-color:%s">%s</td></div>"""% (background_color, elem.q1_percent)

Используйте это поле в представлении формы, например:

<field name = "q1_percent_html" nolabel = "1" readonly = "1"/>

Другие вопросы по теме