openerp 增加明细行时更新主表的汇总字段

通常,这任务可以覆盖主表 objects 的create或 write方法来达成,但为了给操作者一个实时的观感,最好在用户更新或增加明细行时更新界面上的汇总字段

这 需要了解一对多的数值格式
http://openerp.com/wiki/index.php/Developers:Developper%27s_Book/Objects/ObjectsAccess/ObjectsWritingValues
如:
[(1,1,{'item_id':1,'price':30,'cost':20,'quantity':1}),(0,0,{'item_id':3,'price';20,'cost':20,'quantity':10}]

可以明确的有以下几点

1. 这是一个列表
2. 列表元素是一个tuple
3. 每个tuple有三个元素,op,id,values ,其中op 表示动作,有0 -create ,1- write ,2 unlink(删除) ,6- values 是一个记录id值的列表,表示将这些id值的记录作为多方保存,id 是具体记录的编号,当op为0时,为0,values 在op是0,1,2的情况下是一个字段名:值的词典



为一对多字段增加on_change属性
<field name='line_ids' noable='1' colspan='4' on_change='line_ids_changed(line_ids)'/>
在objects中写方法

def line_ids_changed(self,cr,uid,ids,line_ids):
    amount=0
    for row in line_ids:
        if row[0] in (0,1):
            amount +=row[2]['quantity']*row[2]['price']
    return {'value':{'total_amount':amount}}




问题,如果在view中将total_amount的reaonly 为1(在objects定义中设置字段的readonly=True效果相同),则在保存时该汇总字段不会被保存. 这个举止是有问题的,因为通常readonly只是意味着阻止用户手动更新 . 并不意味着阻止程序更新

转载于:https://www.cnblogs.com/jjx/archive/2008/08/18/1270135.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值