【问题标题】:field back to zero after save保存后字段归零
【发布时间】:2018-03-23 12:06:38
【问题描述】:

我在 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 工作正常,但是当我保存此记录时,all_taxes 不采用 tax_value 字段,仅采用 tax_old。当我再次打开记录表单视图并手动在 tax_value 中写入一个值时,它完全可以正常工作。

【问题讨论】:

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


    【解决方案1】:

    在你的计算方法上使用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()

    【讨论】:

    • 这个答案就是你要找的
    【解决方案2】:

    你可以试试

        @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()

    【讨论】:

      【解决方案3】:

      试试这个:

      # 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 的局部变量,而不是实例变量.. 这就是您所追求的

      【讨论】:

      • 我做到了。同样的问题。 Odoo 带来 B 模式的价值。该值显示在来自视图上,但是当我保存时它会返回零。
      • @Tessnim 你将不得不给我更多的代码。我需要查看您的表单、加载方式以及保存方式。
      猜你喜欢
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多