我在模块 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
的局部变量,而不是实例变量。这就是你所追求的