我在 module1 :
中有这个课程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()
在 module2 中,我有这个课程:
class B(models.Model):
_name="b"
a_ids = fields.One2many("a","b_id")
tax_value = fields.Float(string="Tax")
现在在A视图中,当我更改 b_id 值时, tax_value 正常工作, compute_all 工作正常,但是当我保存此记录时,< em> all_taxes 不会 tax_value 字段,只有 tax_old 。当我再次打开记录表单视图并在 tax_value 中手动写入值时,它完全正常。
答案 0 :(得分:2)
在你的计算方法上使用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
可以使用多记录记录集调用compute方法。所以在里面使用for循环。而且你最后不必做update()
。
答案 1 :(得分:1)
你可以尝试一下
@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()
。
答案 2 :(得分:0)
请改为尝试:
# 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
的局部变量,而不是实例变量..这就是你之后的