Odoo 8计算字段不使用self.env公司也不搜索

2024-09-30 18:28:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

无论何时从“total”的compute字段触发变量“registros”,都不会从中获取任何字段。它只是将所有字段设置为0,不做任何其他操作。有人知道我做错了什么吗?你知道吗


Tags: selfidtrueidsfieldssizedetotal
1条回答
网友
1楼 · 发布于 2024-09-30 18:28:57

我想知道为什么它甚至可以不出错地工作,因为在api.multi修饰的方法中使用了self7次。按钮与它配合得很好,因为它总是用单例调用方法。但是计算方法可以同时调用具有多个记录的方法。你知道吗

因此,将该方法重写为多记录方法。使用decorator api.one应该已经足够了,但是按钮可能不再使用它了。你知道吗

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

相关问题 更多 >