当预期为假时,Odoo报告字段数据为“未定义”

时间:2018-04-23 06:19:05

标签: python sql report odoo odoo-10

我修改了crm_opportunity_report

  • 添加了一个布尔字段is_customer = fields.Boolean('Is customer', readonly=True)

  • 在视图中添加了一个字段

    CREATE VIEW crm_opportunity_report AS (
        SELECT
            <...>omitted<...>
            rp.customer as is_customer
        FROM
            "crm_lead" c                        
            LEFT JOIN "res_partner" rp ON rp.id = c.partner_id
            <...>omitted<...>                
        GROUP BY c.id, stage.name, is_customer
    

在报告中单击“+”并选择“是客户”后,有时值Undefined显示为值。

试过这个: COALESCE(rp.customer, FALSE) as is_customer(和分组依据相同)但“未定义”仍然存在。

如果在Odoo报告中我可以Undefined表示False,那么当“未定义”显示为“错误”时

注意:在使用Firefox进行调试时,我可以从服务器上看到(jsonrpc)数据在报告项目中带有“is_customer:false”或“is_customer:true”。但不知何故,报表视图中具有“is_customer:false”的项目显示为,就好像“is_customer:Undefined”。

更新

我偶然发现了line

if (value === false) return _t("Undefined");

这个逻辑背后的原因可能是:'如果值为false则返回“未定义”'

有趣的是,我可以添加if (value === true) return _t("Whatever");:)

1 个答案:

答案 0 :(得分:1)

这并不理想,但您可以在res.partner上创建一种计算的复制/虚拟字段,用于存储Char字段的Boolean版本。

以此为例,其中compute方法只检查字段是否为True,并根据具体情况存储为't''f'

is_customer_string = fields.Char('Is a Customer? (text)', compute='_compute_is_customer_string', store=True)

@api.multi
@api.depends('is_customer')
def _compute_is_customer_string(self):
    for partner in self:
        partner.is_customer_string = 't' if partner.is_customer else 'f'

Documentation on computed fields

注意:store=True可能是可选的,但如果存储该字段,则必须使用某个depends字段作为重新计算的触发器。如果您没有store计算字段,则应保留depends