2017-09-04 69 views
2

假设我有:总和两条浮法领域,同样的形式 - Odoo V8

class Model1(models.Model): 

    name = fields.Char(string="Name") 
    one_1 = fields.One2many('Model2', 'field_many', string="") 
    one_2 = fields.One2many('Model3', 'field_many2', string="") 
    one_3 = fields.One2many('Model4', 'field_many3', string="") 

这些是One2many领域称为模型:我需要总结field_float1

class Model2(models.Model): 
    field_many = fields.Many2one('Model1', string="") 
    field_float1 = fields.Float() 

class Model3(models.Model): 
    field_many2 = fields.Many2one('Model1', string="") 
    field_float2 = fields.Float() 

class Model4(models.Model): 
    field_many3 = fields.Many2one('Model1', string="") 
    field_float3 = fields.Float() 

field_float2,并在field_float3上显示结果,但问题是,或者让我困惑的是,这个总和不仅仅是同一模型中的总和。

我可以这样做:

@api.onchange('field_float1', 'field_float2') 
def _compute_amount_move_sales_current(self): 
    if self.field_float1 or self.field_float2: 
     self.field_float3 = self.field_float1 + self.field_float2 

但这些都是从两个模型,结果必须在第三个模型场反映领域,此外,这些车型都派代表参加01​​形式,通过3 One2many树视图,或因为它们通常被称为Odoo。

因此,它只是要读取前两个字段,但它必须在形式Model1这将创建新的记录。不是数据库表。

编辑

这是一个更精确的解释,用户创建这些线或One2many领域,在所有情况下,前两个必须填写一个新的记录,所以我认为可以用required=True实现国旗在领域。 不过,我已经试过这样:

class Model1(models.Model): 

    name = fields.Char(string="Name") 
    one_1 = fields.One2many('Model2', 'field_many', string="") 
    one_2 = fields.One2many('Model3', 'field_many2', string="") 
    one_3 = fields.One2many('Model4', 'field_many3', string="", onchange="compute_sum") 
    @api.onchange('one_1', 'one_2') 
    def compute_sum(self): 
     if self.one_1.field_float1 or self.one_2.field_float2: 
     self.one_3.field_float3 = self.one_1.field_float1 + self.one_2.field_float2 

但它不工作,当我填表的field_float它需要一个说:

ValueError 

Expected singleton: Model4() 

为进一步说明,该模型的样子这样的:

class Model2(models.Model): 
    field_many = fields.Many2one('Model1', string="") 
    field_float1 = fields.Float() 
    field_float_ = fields.Float() 
    field_integer = fields.Integer() 
    field_char = fields.Char() 

class Model3(models.Model): 
    field_many2 = fields.Many2one('Model1', string="") 
    field_float2 = fields.Float() 
    integer = fields.Integer() 

class Model4(models.Model): 
    field_many3 = fields.Many2one('Model1', string="") 
    field_float3 = fields.Float() 
    chars = fields.Char() 
    bool = fields.Boolean() 

我的意思是,有每个这些模型,这是从Model1调用One2many领域的多个领域,只是那些花车需要操作,而不是每一个。

并且用户将按顺序填充这些字段,按照state的形式,按照statusbar等顺序填充。

回答

2

该解决方案的工作,如果你想总结

field1 of record1 In first one2many field with field2 of record1 In second one2many field to put the the result in field3 of the first record. 

这是一个开始了解你需要的究竟是什么。 在你MODEL1 makr第三one2many领域的计算领域

    @api.depends ('one_1', 'one_2','one_1.field1', 'one_2.field2') 
        def compute_sum(self): 
          # Then loop throw your records and compute sum 

你,但我用我的手机,我可以编辑我的答案后希望至少你的想法我会写更多的CDE。

如果您使用onchange,则当用户更改浮动字段的值时可能也会发挥作用,但如果您使用它,请删除one_1.field1。

只要记住,你需要在YOUT MODEL1定义方法becausr它的存在,你有充分的机会

+1

非常感谢你,一定要尝试做一些测试 – NeoVe

+0

嗨,但现在所有的线是只读的,我的意思是,我在示例中只使用了一个字段,因为它是一个示例,它在某种程度上就是这样,但是此One2many上还有一些其他字段不应该计算,这就是我认为的问题 – NeoVe

+0

想象一下我的例如,其他两个领域本身不应该计算,Idk如果我应该编辑我的问题,我认为,只有在'one_3'字面上有一个字段时才解决您的问题 – NeoVe