保存后字段恢复为零



我在模块 1 中有这个类:

class A(models.Model):
    _name="a"
    b_id = field.Many2one("b")
    tax_old = fields.Float()
    tax_value = fields.Float(string="Tax", related = 'b_id.tax_value', store=True)
    all_taxes = fields.Float(_compute='compute_all')
    @api.depends('tax_value')
    def compute_all(self):
        self.all_taxes = self.tax_value + self.tax_old
        self.update()

模块 2 中,我有这个类:

class B(models.Model):
    _name="b"
    a_ids = fields.One2many("a","b_id")
    tax_value = fields.Float(string="Tax")

现在在视图中,当我更改b_id值时,tax_value工作正常,compute_all工作正常,但是当我保存此记录时,all_taxes不会占用tax_value字段,只会tax_old。当我再次打开记录表单视图并在tax_value中手动写入值时,它完全正常工作。

在计算方法上使用b_id应该足够了,因为它是相关的:

@api.multi
@api.depends('b_id')
def compute_all(self):
    for record in self:
        record.all_taxes = record.b_id.tax_value + record.tax_old

可以使用多记录记录集调用计算方法。因此,请在其中使用 for 循环。而且您不必在最后做update()

你可以

试试

    @api.one
    @api.depends('b_id', 'b_id.tax_value')
    def compute_all(self):
        self.all_taxes = self.tax_value + self.tax_old

两件事:

compute_compute,你不需要使用self.update()

试试这个:

# You'll need this
from django.db.models import F
@api.depends('tax_value')
def compute_all(self):
    self.update(all_taxes=F('tax_value') + F('tax_old'))

你错过了self.你所做的是定义一个名为all_taxes的局部变量,而不是实例变量。这就是你所追求的

最新更新