我想实现以下方案。尝试了很多,但没有运气。
<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>
我正在使用odoo10。上面的代码用于表单视图。
我该如何实现?任何想法的任何帮助是最赞赏的。谢谢!
答案 0 :(得分:0)
直到Odoo 12常规视图(树,窗体等)与QWeb视图之间存在差异,这意味着常规视图不能与要评估的QWeb内容(如报表和网站页面)混合使用。
您仍然可以通过简单地定义一个计算的HTML字段来获取您想要的内容,该字段将包含评估QWeb代码的HTML结果或直接构建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"/>