Odoo V10 - Расчетное поле - PullRequest
       6

Odoo V10 - Расчетное поле

0 голосов
/ 02 октября 2018

Вот мое вычисленное поле:

half_pension_days_value = fields.Integer(string='Day value', copy=False, compute='convert_bin_dec')

Вот моя функция:

@api.multi
def convert_bin_dec(self):
    if self.half_pension:
        print "Je suis dans la fonction convert"
        self.half_pension_days_value = 5

Обнаружена проблема:

Как только я запускаю эту функцию благодаря состоянию моего логического значения half_pension, моя печать начинает зацикливаться.Я думаю, проблема в этой строке -> self.half_pension_days_value = 5.

Но почему?

РЕДАКТИРОВАТЬ: В порядке

@api.model
def create(self, vals):
    record = super(ResPartnerSchool, self).create(vals)
    record.convert_bin_dec()
    return record


@api.multi
def write(self, vals):
    result = super(ResPartnerSchool, self).write(vals)
    self.convert_bin_dec()
    return result

Здесь мойошибка -> RuntimeError: максимальная глубина рекурсии превышена при вызове объекта Python Спасибо

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Ваша проблема в следующем: метод convert_bin_dec() вызывает метод write() вашего объекта, когда вы делаете это: self.half_pension_days_value = 5, а метод write() снова вызывает метод convert_bin_dec(), поэтому у вас есть рекурсивные вызовы.

Чтобы решить эту проблему, вы должны использовать декоратор @api.depends.

Попробуйте это:

@api.multi
@api.depends('half_pension')
def convert_bin_dec(self):
    for record in self:
        if record.half_pension:
            print "Je suis dans la fonction convert"
            record.half_pension_days_value = 5

Не забудьте удалить self.convert_bin_dec() в методах write() и create().

0 голосов
/ 06 октября 2018

Hennion,

Вы сказали, что half_pension - это ваше логическое поле.Затем попробуйте этот код:

@api.multi
def convert_bin_dec(self):
    for rec in self:
        if rec.half_pension == True:
            print "Je suis dans la fonction convert"
            rec.half_pension_days_value = 5

or Вы можете нарушить свой function.it ограничить несколько записей.

@api.multi
def convert_bin_dec(self):
    for rec in self:
        if rec.half_pension:
            print "Je suis dans la fonction convert"
            rec.half_pension_days_value = 5
            break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...