OpenERP - 不同视图页面字段的onchange方法?

1 投票
1 回答
5237 浏览
提问于 2025-04-17 21:04

看起来,onchange方法只在当前可见的字段上有效。如果我用它来填充其他页面上的字段,它就没反应。举个例子,我有一个包含多个页面的视图。大部分信息需要在第一页填写,所以第一页的字段大部分都填好了。但是有一个字段需要在其他页面填写,当我在另一个页面选择partner_id时。比如说,视图是这样的:

...
<page string="page1">
  <field name=partner_id on_change="onchange_partner(partner_id)"
  <field name="field1"/>
  <field name="field2"/>

</page>
<page string="page2">
   <field name="field3"/>
</page>
...

field1field2会被填充。但是我该如何填充field3呢?或者说这根本不可能,因为系统在使用onchange方法时并没有把它保存到数据库里?

我的onchange方法大概是这样的:

def onchange_partner(self, cr, uid, ids, partner_id, context=None):
  res = {}
  if partner_id:
    obj = self.pool.get('res.partner').browse(cr, uid, partner_id)
    res['field1'] = obj.field1
    res['field2'] = obj.field2
    res['field3'] = obj.field3 # this value isn't being filled
  return {'value': res}

那么,我该如何填充field3呢?

1 个回答

2

不是这样的。这个值肯定会改变。你可能在field3里没有得到值,是因为你获取的记录里没有field3的值。至于你的问题,答案是它是有效的。试试这个,

def onchange_partner(self, cr, uid, ids, partner_id, context=None):
    res = {}
    if partner_id:
        obj = self.pool.get('res.partner').browse(cr, uid, partner_id)
        res['field1'] = obj.field1
        res['field2'] = obj.field2
        res['field3'] = 'Hello' # this field type must be char or if not then give 
        #value accordingly, its just to prove you that values are filled on onchange.
    return {'value': res}

希望这能帮到你。

撰写回答