如何在OpenERP中为州和国家编写onchange函数

0 投票
1 回答
5456 浏览
提问于 2025-04-18 13:13
_coloumns={'state_id': fields.many2one("res.country.state", 'State',required=True),
         'country_id': fields.many2one('res.country', 'Country',required=True),
       }  #  in my python file

# my xml file contains this code
<group col="4" colspan="4">
<field name="permanent_address" colspan="4"/>
<field name="birthday"/>
<!--<field name="department_id" on_change="onchange_department_id(department_id)"/>-->
<field name="unit"/>
<!--<field name="vertical_id"/>-->
<field name="gender"/>
<field name="city1"/>
<field name="state_id"/>
<field name="country_id"/>
<field name="mobile"/>
<field name="email"/>
<field name="blood_group"/>
<field name="pan_no"/>
<field name="marital"/>
<field name="anniversary_date" attrs="{'invisible':[('marital','!=','married')]}"/>
</group>

我想要的效果是:如果我在一个输入框里输入州的名字(比如“马哈拉施特拉”),那么国家的名字(“印度”)会自动填上。

1 个回答

1

正常的步骤是:

  1. 给状态字段(state_id)添加一个变更方法

    on_change="state_id_change(state_id, context)"
    
  2. 把这个变更方法加到你的模型里。

    def state_id_change(self, cr, uid, ids, state_id, context = None):
        values = {'country_id': False}
    
        if state_id:
            state = self.pool.get('state_model').browse(cr, uid, state_id, context = context)
            values['country_id'] = state.country_id.id
    
        return {'value': values}
    

需要注意的是,如果用户清空了状态,这样会同时清空国家;但如果选择了一个状态,系统会查找相关的国家ID并返回。你可以在 on_change 方法里放任何你想要的内容,只要它能返回一个字典。

这里假设你使用的是 OpenERP 7。如果你用的是 6 版本,就不要在 XML 的 on_change 属性里加 context 参数。

最后一点,你的模型里有个拼写错误,_columns 拼错了。

撰写回答