Openerp Odoo计算字段:导致不支持的操作数类型

Openerp Odoo计算字段:导致不支持的操作数类型,openerp,odoo-8,Openerp,Odoo 8,在Odoo 8中,我有一个计算字段,其中包含一个导致错误的函数。 似乎无法使事情顺利进行,需要一些帮助 我的测试代码: 从openerp导入模型、字段、api、_ 从openerp.tools.translate导入_ 将openerp.addons.decimal\u精度导入为dp 平面类(models.Model): _名称='plano' _description=“variabelen plaat toeslagen,rillen kenmerken。” name=fields.Char

在Odoo 8中,我有一个计算字段,其中包含一个导致错误的函数。 似乎无法使事情顺利进行,需要一些帮助

我的测试代码:

从openerp导入模型、字段、api、_
从openerp.tools.translate导入_
将openerp.addons.decimal\u精度导入为dp
平面类(models.Model):
_名称='plano'
_description=“variabelen plaat toeslagen,rillen kenmerken。”
name=fields.Char('Plano-naam',required=True)
constructie\u id=fields.Char('Fefco constructie')
testB_p1=fields.Char('Breedte p1',help='Tekst veld p1(variabele Breedte p1)'
toeslagB_p1=fields.Float('toeslag breedte p1(variabel breedte p1)),数字=(3,1))
testL_p1=fields.Char('Lengte p1',help='Tekst veld p1(variabele Lengte p1)'
toeslagL_p1=fields.Float('toeslagL长度p1(变量长度p1)),数字=(3,1))
Kw=fields.Float('kwalitet dikte in mm',digits=(3,0),help=“Wordt uit gerelaterd veld van model Quality gehaald.”)
类计算(models.Model):
@api.depends('名称')
def_功能B_p1(自身):
val1=0.0
如果plano.testB_p1!='H+':
val1=计算功率+(2.0*平面功率)+2.0
elif plano.testB_p1!='B':
val1=计算风电+(平面图toeslagB_p1*plano.Kw)
返回值1
_name=“calc”
_description=“kostprijs berekening。”
name=fields.manyOne('plano',help=“Kostprijs-berekening-numer,例如C1234”)
lengte=fields.Float('lengte in mm',digits=(4,0),help=“lengte in mm”)
breedte=fields.Float('breedte单位为mm',数字=(4,0))
hoogte=fields.Float('hoogte单位为mm',数字=(4,0))
aantal=fields.Float('aantal stuks',数字=(4,0))
planob_p1=fields.Float('Plano-Breedte p1')
planobt_p1=fields.Float('Plano-Breedte-toelagain p1')
val1=fields.Float(compute='\u functionb\u p1',store=True,
字符串='Aanmaak Plano breedte P1',
help=“Berekening vanuit Function\u functionb\u p1”)
错误:

File "....8.0\test\models\calc.py", line 47, in _functionb_p1
val1 = calc.hoogte + (2.0 * plano.Kw) + 2.0
TypeError: unsupported operand type(s) for *: 'float' and 'Float'

打字错误很奇怪。我从来没有遇到过奥多浮子这样的问题

但对您的计算功能有一些提示。它应该使用@api.multi或@api.one(不推荐使用第二个)作为额外的装饰器

然后你应该在plano和calc模型之间建立连接。您的模型关系(没有人)不允许您正在查找的计算,因为您需要一个plano实例/记录和一个calc实例/记录

您正在计算calc模型上的值,因此我将尝试为您提供正确的方法,但有一个条件:calc模型上有一个名为plano_id的多个字段

@api.multi
@api.depends('name')
def _functionb_p1(self):
    for calc in self:
        val1 = 0.0
        plano = calc.plano_id
        if plano.testB_p1 != 'H+':
            val1 = calc.hoogte + (2.0 * plano.Kw) + 2.0
        elif calc.plano_id.testB_p1 != 'B':
            val1 = calc.breedte + (plano.toeslagB_p1 * plano.Kw)
        calc.val1 = val1

# my condition!
plano_id = fields.Many2One(comodel_name="plano", string="Plano")

将“plano.Kw”转换为浮点似乎没有帮助:TypeError:float()参数必须是字符串或数字。