2016-10-10 29 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