【问题标题】:How to get computed field value in search orm in odoo如何在odoo的搜索orm中获取计算字段值
【发布时间】:2018-04-26 06:03:25
【问题描述】:

我在odoo 10 中定义了一个带有计算方法的computed field,现在我想在search orm 中获取它的值,但它的值仍然是False,当我尝试store=True 时它的值没有被改变。 如果有人有解决方案请告诉我,我将非常感谢。 我的代码是:

balance_amount = fields.Float(string="Balance Amount", compute='_compute_loan_amount')

@api.one
def _compute_loan_amount(self):
    total_paid = 0.0
    for loan in self:
        for line in loan.loan_lines:
            if line.paid:
                total_paid += line.amount
        balance_amount = loan.loan_amount - total_paid
        self.total_amount = loan.loan_amount
        self.balance_amount = balance_amount
        self.total_paid_amount = total_paid

当我使用search_countbelow 时:

loan_count = self.env['hr.loan'].search_count([('employee_id', '=', values['employee_id']), ('state', '=', 'approve'),
                                                   ('balance_amount', '!=', 0)])

即使balance_amount 等于Zero,它也总是得到计数值

【问题讨论】:

    标签: odoo odoo-10 odoo-9 odoo-11


    【解决方案1】:

    这里有些事情你必须做。

    1. 定义重新计算依赖关系并使用@api.multiself 上的for 循环,或者使用api.one 并跳过for 循环。如果我理解您的计算方法正确:
    @api.multi
    @api.depends('loan_lines.paid', 'loan_lines.amount', 'loan_amount')
    def _compute_loan_amount(self):
        for loan in self:
            total_paid = 0.0
            for line in loan.loan_lines:
                if line.paid:
                    total_paid += line.amount
            balance_amount = loan.loan_amount - total_paid
            loan.total_amount = loan.loan_amount  # ???
            loan.balance_amount = balance_amount
            loan.total_paid_amount = total_paid
    
    1. 尝试使用浮点数舍入,例如2 位小数,因为浮点数会产生 0.000000000000000002 之类的值,这会破坏您的搜索。

    2. 您要么必须存储值,要么必须定义search 方法。第二种方法更困难(根据我的经验)。

    【讨论】:

    • 谢谢CZoellner
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多