Как получить вычисленное значение поля в поисковой системе в odoo - PullRequest
0 голосов
/ 26 апреля 2018

Я определил computed field с помощью метода вычисления в odoo 10, и теперь я хочу получить его значение в 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 Ответ

0 голосов
/ 26 апреля 2018

Здесь нужно кое-что сделать.

  1. Определить зависимости для пересчета и либо использовать @api.multi и цикл for для self, либо использовать 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

Попробуйте использовать округление с плавающей точкой, например, с 2 десятичными знаками, потому что числа с плавающей запятой могут давать значения, такие как 0,000000000000000002, и это может нарушить ваш поиск.

Вы должны либо сохранить значениеили нужно определить метод search.Второй подход сложнее (по моему опыту).

...