【问题标题】:Odoo 8 - Computed field doesn't use self.env nor searchesOdoo 8 - 计算字段不使用 self.env 也不搜索
【发布时间】:2019-05-02 19:45:45
【问题描述】:

我的模型中有一个方法,当我通过按钮调用它时,它工作得非常好,但是,每当它由我在同一个模型中的计算字段触发时,由于我不这样做的原因,它无法执行其中的所有代码不知道。即使发生这种情况,如果我通过按钮再次调用该方法,它也可以正常工作。我试过用谷歌搜索这个问题,但没有运气。这是我的代码中有问题的部分。

class recibos(models.Model):
_name = "tecnop.recibos"
_rec_name = "num_recibo"

num_recibo = fields.Integer('Número de recibo', size=20)
fecha = fields.Date('Fecha')
# Conecta con módulo de productos
ids_productos = fields.One2many('tecnop.productos', 'id_producto', 'Productos')

# Relación con módulo de proveedores
ids_proveedores = fields.Many2one('tecnop.proveedores', 'Proveedor')
total = fields.Float('Total', size=400, readonly=True, store=True, compute='calcular_total')
subtotal = fields.Float('Subtotal', size=400, readonly=True)
impuesto_total = fields.Float('Impuesto', size=400, readonly=True)

@api.multi
@api.depends('ids_productos.nombre', 'ids_productos.precio')
def calcular_total(self):
    registros = self.env['tecnop.productos'].search([('id_producto', '=', self.id)]) 
    self.total = 0
    self.impuesto_total = 0
    self.subtotal = 0
    for registro in registros:
        if registro.precio:
            impuestos = self.env['tecnop.impuestos'].search([('id_impuesto', '=', registro.id)]) 
            for impuesto in impuestos:
                if impuesto.impuesto:
                    registro.impuesto = registro.precio * impuesto.impuesto
                    self.total = (registro.precio * registro.cantidad) + self.total
                    self.impuesto_total = registro.impuesto + self.impuesto_total
                    self.subtotal = self.total - self.impuesto_total

无论何时,变量“registros”都不会从“total”的计算字段中获取任何字段。它只是将所有字段设置为 0 并且不执行任何其他操作。有谁知道我在这里做错了什么?

【问题讨论】:

    标签: python odoo


    【解决方案1】:

    我想知道为什么它甚至可以正常工作,因为您在 api.multi 装饰方法中使用了 self 7 次。按钮与它配合得很好,因为它总是用单例调用方法。但是计算方法可以一次调用具有多条记录的方法。

    所以将方法重写为多记录方法。使用装饰器api.one 应该就足够了,但按钮可能不再使用它。

    另一种解决方案是在方法for record in self: 的开头实现另一个foreach 循环,然后使用record 而不是self

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多