【问题标题】:Odoo Inherit - adding fieldsOdoo 继承 - 添加字段
【发布时间】:2017-04-06 15:12:02
【问题描述】:

我正在测试 Odoo 9 并试图找出继承。使用下面的代码应该将字段 jason_test2、total_amount_invoice 和 total_balance_invoice 添加到 res.partner 表中。它没有添加它们,我不知道是否应该添加它们。

from openerp.osv import osv, fields
from openerp.tools.translate import _
from openerp import fields, models, api, exceptions, _
class ResPartner(models.Model):


_inherit = 'res.partner'
def _get_total_amount_invoice(self):
    res = {}
    for partner in self:
        invoice_obj = self.env['account.invoice']
        invoice_ids = invoice_obj.search([('partner_id', '=', partner.id)])
        amount_total = 0
        for invoice in invoice_ids:
            amount_total += invoice.amount_total
        res.update({'total_amount_invoice': amount_total})


def _get_total_balance_invoice(self):
    res = {}
    for partner in self:
        invoice_obj = self.env['account.invoice']
        invoice_ids = invoice_obj.search([('partner_id', '=', partner.id)])
        balance_total = 0
        for invoice in invoice_ids:
            balance_total += invoice.residual
        res.update({'total_balance_invoice': balance_total})


jason_test2 = fields.Char("Jason2")

total_amount_invoice = fields.Monetary(string='Amount Total', type='float',
                                       readonly=True, compute='_get_total_amount_invoice')
total_balance_invoice = fields.Monetary(string='Balance Total', type='float',
                                        readonly=True, compute='_get_total_balance_invoice')

【问题讨论】:

  • 检查是否在init.py文件中导入了新的python文件

标签: python-2.7 openerp odoo-9


【解决方案1】:

除非是问题格式问题,否则类定义的主体应该缩进,否则它根本不是类的一部分。

class ResPartner(models.Model):

    _inherit = 'res.partner'
    def _get_total_amount_invoice(self):
        res = {}
        for partner in self:
            invoice_obj = self.env['account.invoice']
            invoice_ids = invoice_obj.search([('partner_id', '=', partner.id)])
            amount_total = 0
            for invoice in invoice_ids:
                amount_total += invoice.amount_total
            res.update({'total_amount_invoice': amount_total})


    def _get_total_balance_invoice(self):
        res = {}
        for partner in self:
            invoice_obj = self.env['account.invoice']
            invoice_ids = invoice_obj.search([('partner_id', '=', partner.id)])
            balance_total = 0
            for invoice in invoice_ids:
                balance_total += invoice.residual
            res.update({'total_balance_invoice': balance_total})


    jason_test2 = fields.Char("Jason2")

    total_amount_invoice = fields.Monetary(string='Amount Total', type='float',
                                           readonly=True, compute='_get_total_amount_invoice')
    total_balance_invoice = fields.Monetary(string='Balance Total', type='float',
                                            readonly=True, compute='_get_total_balance_invoice')

【讨论】:

  • 如果没有缩进问题,应该将 jason_test2、total_amount_invoice 和 total_balance_invoice 添加到 res.partner 表中。我
  • 只需将jason_test2 添加到表中。另外两个是计算字段,默认情况下不存储,除非您在字段定义中指定store=True。还要确保您已按照@Charif 的建议在__init__ 中导入了您的模块,并且在字段定义发生更改后您已安装/升级了您的模块。
【解决方案2】:

货币字段需要一个互补的货币字段来存储 金额的货币。

1 添加一个字段来存储正在使用的货币

class LibraryBook(models.Model):
     # ...
     currency_id = fields.Many2one('res.currency', string='Currency')

2 添加货币字段以存储金额

total_amount_invoice = fields.Monetary(string='Amount Total', type='float',
                                   readonly=True, currency_field='currency_id' compute='_get_total_amount_invoice')

【讨论】: