2015-04-24 109 views

回答

2

您可以通過onchange方法做到這一點,這裏是用odoo的新的API平變化方法的演示。

class DemoModel(models.Model): 

    _name = 'demo.model' 

    field_x = fields.Integer('Column X') 
    field_y = fields.Integer('Column Y') 
    field_sum = fields.Integer('Column Sum') 

    @api.onchange('field_x', 'field_y') 
    def onchange_field(self): 
     if self.field_x or self.field_y: 
      self.field_sum = self.field_x + self.field_y 

你不需要在視圖部分(xml)中改變任何東西。

+0

兄弟,得到NameError:名稱'API'未定義 – nikolas

3

創建一個名爲result的第三個字段,它使用帶默認值的onchange或功能字段將num1num2相加。您可以將它隱藏在窗體視圖中並以樹形視圖顯示。

由於每次加載視圖時都會計算函數字段,所以如果您打算在樹視圖中使用它,請不要這樣做,因爲隨着記錄和計算變得越來越複雜,它將顯着減慢視圖加載速度。您也可以使用store=true強制將值存儲在數據庫中。

如果它是用qweb寫的,則上述情況將有區別。

更新:

欲瞭解更多信息有關onchange...

代碼和使用的onchange: 在Python文件:

class sample_test(osv.osv): 
    _name = "sample.test" 

    _columns = { 
       'num1': fields.integer('Num1'), 
       'num2': fields.integer('Num2'), 
       'result': fields.integer('Result'), 
       } 

    def onchange_result(self, cr, uid, ids, num1, num2, context=None): 
     res = {} 
     if num1 and numb2: 
      res['result'] = numb1 + numb2 
     return {'value': res} 

在XML文件:

<field name="num1" on_change="onchange_result(num1, num2)" /> 
<field name="num2" on_change="onchange_result(num1, num2)" /> 
<field name="result" /> 

對於功能字段參考:

語法:https://doc.odoo.com/v6.0/developer/2_5_Objects_Fields_Methods/field_type.html#functional-fields

說明:http://bazaar.launchpad.net/~openerp/openobject-server/7.0/view/head:/openerp/osv/fields.py#L843

簡單的例子:https://stackoverflow.com/a/11981080/3374651

+0

感謝兄弟。請你用代碼解釋一下。 – nikolas

+0

我已經添加了一個示例代碼。檢查出來... –

+0

store = True不存儲該值。它重置爲0.0 – nikolas

0

你寫錯變量條件numb1 numb2

類鈣(osv.osv): _name = 「鈣」

_columns = { 
      'num1': fields.integer('Num1'), 
      'num2': fields.integer('Num2'), 
      'result': fields.integer('Result'), 
      } 

def onchange_result(self, cr, uid, ids, num1, num2, context=None): 
    res = {} 
    if num1 and num2: 
     res['result'] = num1 + num2 
    return {'value': res} 

計算()