Navigation

    Odoo 中文社区

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    • Users
    • Groups

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

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

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

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

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

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

    Odoo 开发与实施交流
    1
    2
    4939
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jjx last edited by

      通常,这任务可以覆盖主表 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]]

      1 Reply Last reply Reply Quote 0
      • First post
        Last post