float()参数必须是字符串或数字,而不是'tuple'

时间:2020-06-11 20:38:17

标签: odoo

我需要一些帮助,我从odoo开始,我有这个

@api.depends('clave_factura')
def set_totales(self):

    self.env.cr.execute('select sum(total_detalle) as total from caratulas_detalle where factura_id = %s', (self.clave_factura,))
    # fetchone() will return the first element found as dictionary
    registros = self.env.cr.fetchall()
    totaldtotales = registros[0] if registros else 0
    for rec in self:
        rec.total_kllevo = totaldtotales
        rec.total_resto = rec.total_fac - rec.total_kllevo

这是我的领域

total_kllevo = fields.Float('Lo Agregado', readonly=True, help='Total', compute='set_totales', store=True)
total_resto = fields.Float('Lo Restante', readonly=True, help='Total', compute='set_totales', store=True)

这是错误

File "c:\program files (x86)\odoo 12.0\server\odoo\addons\prossesa_proyectos\models\prossesa_proyectos.py", line 147, in set_totales
    rec.total_kllevo = totaldtotales
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1003, in __set__
    value = self.convert_to_cache(value, record)
  File "C:\Program Files (x86)\Odoo 12.0\server\odoo\fields.py", line 1263, in convert_to_cache
    value = float(value or 0.0)
TypeError: float() argument must be a string or a number, not 'tuple'

我知道也许这确实很容易,但我的脑筋崩溃了。

1 个答案:

答案 0 :(得分:0)

由于registros的第一个元素是一个元组,所以出现了该错误。

示例:

>>> registros = self.env.cr.fetchall()
>>> registros[0]
(4610.0,)

您可以使用totaldtotales的第一个元素对其进行修复。