保存后字段回零

时间:2018-03-23 12:06:38

标签: python django python-2.7 odoo odoo-10

我在 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 中手动写入值时,它完全正常。

3 个答案:

答案 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的局部变量,而不是实例变量..这就是你之后的