Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

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



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

    这 需要了解一对多的数值格式
    <A href="http://openerp.com/wiki/index.php/Developers:Developper's_Book/Objects/ObjectsAccess/ObjectsWritingValues" target="_blank"> 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}}

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

    [[i] 本帖最后由 jjx 于 2008-8-18 11:12 编辑 [/i]]


Log in to reply