将 OpenERP 7 方法重写为 Odoo 8 语法?

Rewrite an OpenERP 7 method to Odoo 8 syntax?

我有以下 OpenERP 7 方法:

#   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

正确的代码应该是什么?

您似乎在设置功能字段。您应该能够像这样将字段定义为 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