Я хочу добиться следующего сценария. Пробовали разными способами, но безрезультатно.
<t t-if = "q1_percent > 75">
<td style = "background-color:#52be80"><field name = "q1_percent" nolabel = "1"/></td>
</t>
<t t-elif = "'q1_percent' > 50 and 'q1_percent' < 75">
<td class = "td_act" style = "background-color:#f4d03f"><field name = "q1_percent" nolabel = "1"/></td>
</t>
<t t-elif = "'q1_percent' < 50">
<td class = "td_act" style = "background-color:#e74c3c"><field name = "q1_percent" nolabel = "1"/></td>
</t>
Я использую odoo 10. И приведенный выше код предназначен для просмотра формы.
Как я могу этого добиться? Любые идеи, любая помощь приветствуется. Спасибо!






До 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 > 75">
<td style = "background-color:#52be80"><t t-esc = "q1_percent"/></td>
</t>
<t t-elif = "'q1_percent' > 50 and 'q1_percent' < 75">
<td class = "td_act" style = "background-color:#f4d03f"><t t-esc = "q1_percent"/></td>
</t>
<t t-elif = "'q1_percent' < 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"/>