Как определить вычисление в поле в графическом интерфейсе Odoo?

Я создаю поле в графическом интерфейсе Odoo, у меня есть метод с «вычислением». Но я не могу понять.

У меня есть поле, созданное с помощью атрибута вычисления в модуле sale.order.line модуля sale.py.

niu = fields.Char(string="NIU", compute="_niu_validation", readonly=True, store=True)

@api.depends('product_id.product_tmpl_id.type')
def _niu_validation(self):
    for rec in self:
        if rec.product_id.product_tmpl_id.type == 'product' and not rec.niu:
                rec.niu = self.env['ir.sequence'].next_by_code('sale.order.line')

Это прекрасно работает, но то же самое нужно сделать в графическом интерфейсе Odoo.

Под изображением отображается:http://es.zimagez.com/zimage/computefield.php

Но это показывает мне следующую ошибку:

ValueError: forbidden opcode(s) in u"for rec in self:\n        if rec.product_id.product_tmpl_id.type == 'product' and not rec.niu:\n \t    rec.niu = self.env['ir.sequence'].next_by_code('sale.order.line')"

Возможно, есть синтаксическая ошибка, но я не знаю, как определить метод для поля в графическом интерфейсе Odoo.

Любая помощь, советы, предложения приветствуются. Если бы кто-то мог мне помочь, я был бы очень благодарен.


person beriliox    schedule 01.03.2016    source источник
comment
Вы пытались избежать цикла for? Может быть, попробуйте просто удалить его и использовать только при условии.   -  person Alessandro Ruffolo    schedule 01.03.2016
comment
Теперь я получаю следующую ошибку: ValueError: имя 'rec' не определено при оценке   -  person beriliox    schedule 01.03.2016
comment
Когда я сказал избегать цикла, конечно, вам нужно было адаптировать остальную часть кода!   -  person Alessandro Ruffolo    schedule 01.03.2016


Ответы (3)


Решение состоит в том, чтобы присвоить значение с помощью присваивания, похожего на словарь, вместо самого себя. аннотация, например:

 self.x_hora_estimada_llegada = self.date_order

Будет бросать

запрещенные коды операций в u....

Но вместо этого вы используете присваивание, похожее на словарь, и с вашим полем все будет в порядке!:

for record in self:
    record['x_hora_estimada_llegada'] = self.date_order
person ZooMMX    schedule 21.01.2017

Я не работаю с v9, поэтому думаю, что нужно просто немного поработать методом проб и ошибок.

Попробуйте с этим:

    if self.product_id.product_tmpl_id.type == 'product' and not self.niu:
            self.niu = self.env['ir.sequence'].next_by_code('sale.order.line')

Если это не работает, возможно, попробуйте:

    if self.product_id.product_tmpl_id.type == 'product' and not self.niu:
            return self.env['ir.sequence'].next_by_code('sale.order.line')
person Alessandro Ruffolo    schedule 01.03.2016
comment
это не может быть прежним: в моем коде больше нет rec. Какое значение он не принимает? - person Alessandro Ruffolo; 01.03.2016
comment
Первый код показывает следующую ошибку: ValueError: запрещенные коды операций в uif self.product_id.product_tmpl_id.type == 'product', а не self.niu:\n self.niu = self.env['ir.sequence' ].next_by_code('sale.order.line') И второй код показывает следующую ошибку: SyntaxError: 'return' вне функции - person beriliox; 01.03.2016
comment
Это не очень полезно. Что бы я сделал, не имея документации, так это поставил точки останова и пошагово отладил парсер поля Calcular, чтобы понять, что можно туда поместить, а что нельзя. - person Alessandro Ruffolo; 01.03.2016

Дорогие,

Я столкнулся с похожей проблемой, вы можете попробовать с

если self.product_id.product_tmpl_id.type == 'product', а не self.niu: self.['niu'] = self.env['ir.sequence'].next_by_code('sale.order.line')

person user6547803    schedule 04.07.2016