2016-10-10 28 views
0

我有以下的OpenERP 7方法:將OpenERP 7方法重寫爲Odoo 8語法?

# Function to get the vat number (CIF/NIF) and then show it on invoice form view 
def _get_vat_num(self, cr, uid, ids, field_name, args=None, context=None): 
    partner_pool = self.pool.get('res.partner') 
    invoice_pool = self.pool.get('account.invoice') 
    res = {} 
    for inv in self.browse(cr, uid, ids, context=context): 
     invoice = invoice_pool.browse(cr,uid, inv.id, context=None) 
     partner = partner_pool.browse(cr, uid, invoice.partner_id.id, context=None) 
     res[inv.id] = partner.vat 

    return res 

inv_vat = fields.Char(compute='_get_vat_num', string="CIF/NIF") 

我需要重寫它Odoo V8語法。我已經嘗試過但不起作用:

def _get_vat_num(self): 
    partner_pool = self.env['res.partner'] 
    invoice_pool = self.env['account.invoice'] 

    res = {} 
    for inv in self.browse(self.id): 
     invoice = invoice_pool.browse(inv.id) 
     partner = partner_pool.browse(invoice.partner_id.id) 
     res[inv.id] = partner.vat 

    return res 

什麼應該是正確的代碼?

+0

你是什麼˚F爲什麼?你遇到了什麼錯誤? – alexbclay

+0

如何在py端調用該函數?取決於調用,我們必須在odoo v8中添加不同的裝飾器 –

回答

1

看起來您正在設置功能性字段。而應該是能夠定義字段作爲related field像這樣:

inv_vat = fields.Char(string="VAT", related="partner_id.vat") 

如果你真的想它作爲一個功能性領域,這是你會怎麼做

inv_vat = fields.Char(string="VAT", compute="_get_vat_num") 

def _get_vat_num(self): 
    # self is a recordset of account.invoice records 
    for invoice in self: 
     # to set a functional field, you just assign it 
     invoice.inv_vat = invoice.partner_id.vat 

退房記錄文檔:https://www.odoo.com/documentation/8.0/reference/orm.html#recordsets

和計算領域的文檔: https://www.odoo.com/documentation/8.0/reference/orm.html#computed-fields

+0

感謝@alexbclay。我不是試圖存儲這個字段,因爲它只是爲了一些人的額外參考。由於這個原因,我創建了一個計算字段'inv_vat = fields.Char(compute ='_ get_vat_num',string =「CIF/NIF」)'。我的問題是重寫函數。我去試試你的解決方案。 –

+1

我試過用'store = False'的相關領域,它的工作原理!感謝示例函數,它也非常有用。 –

+0

沒問題,很高興我可以幫忙! – alexbclay