2015-10-29 96 views
0

在Odoo 8中,我有一個帶有導致錯誤的函數的計算字段。 似乎無法使事情工作,需要一些幫助。Odoo計算字段:導致不支持的操作數類型

我的測試代碼:

from openerp import models, fields, api, _ 
from openerp.tools.translate import _ 
import openerp.addons.decimal_precision as dp 

class plano(models.Model): 
    _name = 'plano' 
    _description = "variabelen plaat toeslagen, rillen kenmerken." 

    name = fields.Char('Plano naam', required=True) 
    constructie_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)', digits=(3, 1)) 
    testL_p1 = fields.Char('Lengte P1', help = 'Tekst veld P1 (variabele lengte P1)') 
    toeslagL_p1 = fields.Float('toeslag lengte P1 (variabel lengte P1)', digits=(3, 1)) 
    Kw = fields.Float('Kwaliteit dikte in mm', digits=(3, 0), help = "Wordt uit gerelateerd veld van model Quality gehaald.") 


class calc(models.Model): 

    @api.depends('name') 
    def _functionb_p1(self): 
    val1 = 0.0 

     if plano.testB_p1 != 'H+': 
      val1 = calc.hoogte + (2.0 * plano.Kw) + 2.0    
     elif plano.testB_p1 != 'B': 
      val1 = calc.breedte + (plano.toeslagB_p1 * plano.Kw) 
    return val1 

    _name = "calc" 
    _description = "kostprijs berekening." 


    name = fields.Many2one('plano', help = "Kostprijs berekening nummer e.g. C1234") 
    lengte = fields.Float('Lengte in mm', digits=(4, 0), help = "Lengte in mm") 
    breedte = fields.Float('Breedte in mm', digits=(4, 0)) 
    hoogte = fields.Float('Hoogte in mm', digits=(4, 0)) 
    aantal = fields.Float('Aantal stuks', digits=(4, 0)) 

    planob_p1 = fields.Float('Plano Breedte P1') 
    planobt_p1 = fields.Float('Plano Breedte toeslag P1') 
    val1 = fields.Float(compute = '_functionb_p1', store=True, 
        string = 'Aanmaak Plano breedte P1', 
        help = "Berekening vanuit functie _functionb_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' 
+0

將'plano.Kw'投射爲浮點似乎沒有幫助:TypeError:float()參數必須是字符串或數字。 –

回答

0

的類型錯誤是很奇怪的。我從來沒有這樣的問題,Odoo Float ...

但是對你的計算功能有一些提示。它應該使用@ api.multi或@ api.one(第二個被棄用)作爲額外的裝飾器。

然後你應該在plano和calc模型之間建立聯繫。你的模型關係(沒有人)不允許你正在尋找的計算,因爲你需要一個計劃實例/記錄和一個計算實例/記錄。

您正在計算您的calc模型的值,所以我會嘗試讓您找到正確的方法,並且有一個條件:在名爲plano_id的calc模型上有一個Multi2One字段。

@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") 
相關問題