如何在GUI Odoo中的字段中定义计算?

时间:2016-03-01 12:00:27

标签: python openerp odoo-9

我在GUI中创建一个字段Odoo有一个带有' compute'的方法。但我无法得到它。

我在sale.py模块的sale.order.line中使用compute属性创建了一个字段。

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')

这非常有效,但同样想在GUI 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')"

可能存在语法错误,但我不知道如何为GUI Odoo中的字段定义方法。

欢迎任何帮助,建议和建议。如果有人能帮助我,我将非常感激。

3 个答案:

答案 0 :(得分:3)

解决方案是使用类似字典的赋值而不是self来赋值。注释,例如:

 self.x_hora_estimada_llegada = self.date_order

将抛出

  

禁止操作码在你....

但你使用类似字典的作业,你的字段就可以了!:

for record in self:
    record['x_hora_estimada_llegada'] = self.date_order

答案 1 :(得分:1)

我不使用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')

答案 2 :(得分:0)

逗人,

我遇到了类似的问题,你可以试试

  

如果self.product_id.product_tmpl_id.type =='产品'而不是self.niu:          自我。[' niu'] = self.env [' ir.sequence']。next_by_code(' sale.order.line')