假设我有这些字段:
#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_n
和qty__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
字段没有做任何事情,任何想法?
答案 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