活动时总结不同的字段 - Odoo v8

时间:2017-06-24 19:59:02

标签: python openerp odoo-8

假设我有这些字段:

#Lamination packeting
@api.onchange('cost_rs18', 'qty__m_18')
def total18(self):
    if self.cost_rs18 or self.qty__m_18:
        self.total_18 = self.cost_rs18 * self.qty__m_18

cost_rs18 = fields.Float("Cost Rs.")
qty__m_18 = fields.Integer("Qty")
total_18 = fields.Float(string="Total")
#Packing
@api.onchange('cost_rs19', 'qty__m_19')
def total19(self):
    if self.cost_rs19 or self.qty__m_19:
        self.total_19 = self.cost_rs19 * self.qty__m_19

cost_rs19 = fields.Float("Cost Rs.")
qty__m_19 = fields.Integer("Qty")
total_19 = fields.Float(string="Total")
#Others
@api.onchange('cost_rs20', 'qty__m_20')
def total20(self):
    if self.cost_rs20 or self.qty__m_20:
        self.total_20 = self.cost_rs20 * self.qty__m_20

cost_rs20 = fields.Float("Cost Rs.")
qty__m_20 = fields.Integer("Qty")
total_20 = fields.Float(string="Total")

这些显然总结了各自的total_n字段。

但另一方面,并​​不总是他们应该受到侮辱,让我解释一下自己。

所有这3个字段(在我的代码中实际上是20个字段)都有各自的total_n字段,这些字段总结了每个cost_rs_nqty__m_n个字段。

现在我要创建一个“总计”,这应该总结所有20个字段,这不难理解,但是,我的观点是,并不总是你将总计所有20个,有时是12个活跃总数,有时是2个,有时是20个。

我怎样才能做到这一点?我可以使用我在@api.onchange上使用的相同逻辑但是对于所有这些逻辑吗?知道并不总是他们都有数据可以求和吗?

修改

这是我实际使用的功能,它总结了我模型中所有实际字段的总数:

@api.onchange('total_1', 'total_2',
    'total_3', 'total_4', 'total_5', 'total_6',
    'total_7', 'total_8', 'total_9', 'total_10',
    'total_11', 'total_12', 'total_13', 'total_14',
    'total_15', 'total_16', 'total_17', 'total_18',
    'total_19', 'total_20')
def total21(self):
    if self.total_1 or self.total_2 or self.total_3 or self.total_4 or self.total_5 or self.total_6 or self.total_7 or self.total_8 or self.total_9 or self.total_10 \
    or self.total_11 or self.total_12 or self.total_13 or self.total_14 or self.total_15 or self.total_16 or self.total_17 or self.total_18 or self.total_19 or self.total_20:
        self.total_totals = self.total_1 * self.total_2 * self.total_3 * self.total_4 * self.total_5 * self.total_6 * self.total_7 * self.total_8 * self.total_9 * self.total_10 \
        * self.total_11 * self.total_12 * self.total_13 * self.total_14 * self.total_15 * self.total_16 * self.total_17 * self.total_18 * self.total_19 * self.total_20

total_totals = fields.Float(string="Total")

我已将default=0.00添加到所有这些总计中,但没有结果,total_totals字段没有做任何事情,任何想法?

1 个答案:

答案 0 :(得分:1)

我认为您的代码运行正常。在你的乘法中确保所有总数都是!= 0。

修改 我不确定这是最好的答案,但它会满足您的要求,请尝试以下代码。

@api.onchange('total_19','total_18','total_20')
def total21(self):
    total = 1
    for rec in self:
        for i in range(18,21):
            rec1 = eval('rec.total_'+str(i))
            if rec1:
                total = total * rec1
        if total !=1:
            self.total_totals=total
        else:
            self.total_totals=None