如何在Odoo中的搜索ORM中获取计算的现场值



我已经在 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_count时:

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

即使balance_amount等于Zero

,它总是获得计数值

您需要在这里做一些事情。

  1. 定义重新计算依赖性,并使用@api.multi和A进行self循环或使用api.one并跳过A进行循环。如果我理解您的计算方法正确:
@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. 尝试使用float舍入例如2个小数,因为浮子可以产生0.000000000000000002之类的值,这会打破您的搜索。

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

最新更新