在我的模型中有一个方法,当我通过按钮调用它时,它工作得非常好,但是,每当它被同一个模型中的计算字段触发时,它就无法执行其中的所有代码,原因我不知道。即使在这种情况发生之后,如果我再次通过按钮调用该方法,它也可以正常工作。我试过用谷歌搜索这个问题,但运气不好。下面是我的代码中有问题的部分。你知道吗
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,不做任何其他操作。有人知道我做错了什么吗?你知道吗
我想知道为什么它甚至可以不出错地工作,因为在
api.multi
修饰的方法中使用了self
7次。按钮与它配合得很好,因为它总是用单例调用方法。但是计算方法可以同时调用具有多个记录的方法。你知道吗因此,将该方法重写为多记录方法。使用decorator
api.one
应该已经足够了,但是按钮可能不再使用它了。你知道吗另一种解决方案是在方法
for record in self:
的开头实现另一个foreach循环,然后使用record
而不是self
。你知道吗相关问题 更多 >
编程相关推荐