gpt4 book ai didi

python - Odoo 8 - 计算字段不使用 self.env 也不搜索

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:56 24 4
gpt4 key购买 nike

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

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

最佳答案

我想知道为什么它甚至可以毫无错误地工作,因为您在 api.multi 装饰方法中使用了 self 7 次。这些按钮与它配合得很好,因为它总是使用单例调用该方法。但计算方法可以同时调用具有多个记录的方法。

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

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

关于python - Odoo 8 - 计算字段不使用 self.env 也不搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com