首页 > 解决方案 > 如何将两个值作为字符串连接到odoo Char字段中?

问题描述

我正在尝试从另一个模型中获取字段,然后对它们进行一些操作,逻辑没有问题,但是当方法运行时出现此错误

psycopg2.DataError:双精度类型的无效输入语法:“1.007 t”

这些都是我所做的

 class uom_custom(models.Model):
_inherit = 'product.template'

uom_qty = fields.Char(store=True,compute='get_qty')

@api.depends('qty_available')
def get_qty(self):
    uoms=self.env['uom.uom'].search(['&',('category_id', '=', self.uom_id.category_id.id),('show_qty','=',True)])
    if uoms.uom_type == 'bigger':
        self.uom_qty= str(str(self.qty_available / uoms.factor_inv) + ' ' + uoms.name)
    elif self.uom_type =='smaller':
        self.uom_qty= str(self.qty_available * uoms.factor_inv) + ' ' + uoms.name
    else:
        self.uom_qty= str(self.qty_available) + ' ' + uoms.name
    return self.uom_qty

那么如何在它旁边显示数学运算的值和 uom 名称提前谢谢

标签: pythonpython-3.xodoo

解决方案


该错误表明数据库中的列被定义为双精度。你确定你已经重启了 Odoo 并更新了你的模块吗?

您的计算方法中存在一些常见错误。首先,我不能经常重复它:尝试坚持 Odoo 命名指南并命名它compute_uom_qty。其次,如果没有特殊的装饰器,一个计算方法可以并且会被多个记录调用,因此循环这些记录。第三:您搜索的uom.uom也可能导致多条记录。因此,要么将搜索限制为一条记录,要么/并检查是否找到了某些东西。uoms.name可能导致 SingletonError。最后:您不必在计算方法中返回任何内容。

@api.depends('qty_available')
def compute_uom_qty(self):
    for record in self:
        uoms = self.env['uom.uom'].search(
            [('category_id', '=', record.uom_id.category_id.id),
            ('show_qty','=',True)], limit=1)
        if uoms.uom_type == 'bigger':
            qty = record.qty_available / uoms.factor_inv
            record.uom_qty = "{} {}".format(qty, uoms.name)
        elif uoms.uom_type =='smaller':
            qty = record.qty_available * uoms.factor_inv
            record.uom_qty = "{} {}".format(qty, uoms.name)
        else:
            record.uom_qty = "{} {}".format(record.qty_available, uoms.name)

推荐阅读