2012-05-09 48 views
5

我嘗試對我的對象的字段進行一些計算並將它們存儲到新字段中。 我開始使用fileds.function的一個簡單示例,但是當我嘗試登錄到openerp時,系統提示用戶或密碼不正確。OpenERP:簡單使用fields.function

在我的課我添加字段:函數的

 'a' : fields.integer('A'), 
     'b' : fields.integer('B'), 
     'total' : fields.function(fnct, method=True, string='Tot',type='integer'), 

定義:

 def fnct(self, cr, uid, ids, fields, arg, context): 

      x = {} 

      for record in self.browse(cr, uid, ids): 

       x[record.id] = record.a + record.b 

      return x 

請,誰能幫助我?謝謝

回答

4

函數沒有提供與OpenERP登錄提交的連接。

所以它可能會提供錯誤的用戶名或密碼。

功能域的主要用途是:

自動計算領域的價值基於其他字段。

即總共= FIELD1 + FIELD2 +字段3

實施例: '總':fields.function(get_total,方法=真,字符串= '總計',類型= '整數'),

如何定義功能:

def get_total(self, cr, uid, ids, fields, arg, context): 

    x={} 

    for record in self.browse(cr, uid, ids): 

     x[record.id]= record.field1 + record.field2 + record.field3 

    return x 
+0

謝謝Avadhesh爲你的幫助。但我確定用戶和通行證是正確的,因爲當我用函數註釋代碼時,我可以登錄。我試圖根據其他字段計算字段的值正如你所說,它仍然無法正常工作! –

+0

你正在得到哪個錯誤? – Avadhesh

+0

當我登錄時,我得到了「Mauvais nom d'utilisateur ou mot de passe」,但我確定它們是正確的!這裏是我的新函數'def fnct(self,cr,uid,id,fields,arg,context): x = {} for self.browse(cr,uid,ids)中的記錄: x [record.id ] = record.a + record.b \t return x' –

2

要解決這個問題,我查了一些intendation也是我的函數的定義應該是字段聲明之前。

+0

恭喜修復!如果可以,請確保將答案標記爲「已接受」,以便其他人可以從您的解決方案中學習。乾杯〜 –

0
def fnct(self, cr, uid, ids, fields, arg, context): 

    x = {} 

    for record in self.browse(cr, uid, ids): 

    x[record.id] = record.a - record.b 

if x[record.id]<0: 

    raise osv.except_osv(("Warning"),("You Cant Subtract %s ")%(record.a - record.b)) 

else: 


return x 

    "a":fields.integer('A'), 
    "b":fields.integer('B'), 


"total":fields.function(fnct, method=True, string='Total',type='integer'),