Events

On Change

当一个字段的内容发生改变时,on_change属性定义个方法就会被调用。

这个方法至少有几个参数:cr,uid,ids,这是三个传统的参数并且也在上下文字典中。你需要给方法添加参数。他们必须符合在视图中定义的其他字段,并且必须在XML中以以下的方式定义::

  1. <field name="name_of_field" on_change="name_of_method(other_field'_1_', ..., other_field'_n_')"/>

下面的是来自销售订单视图中的例子。

你可以使用‘context’关键字来访问上下文中的数据,这个上下文可以被用作函数中的参数::

  1. <field name="shop_id" on_change="onchange_shop_id(shop_id)"/>
  1. def onchange_shop_id(self, cr, uid, ids, shop_id):
  2. v={}
  3. if shop_id:
  4. shop=self.pool.get('sale.shop').browse(cr,uid,shop_id)
  5. v['project_id']=shop.project_id.id
  6. if shop.pricelist_id.id:
  7. v['pricelist_id']=shop.pricelist_id.id
  8. v['payment_default_id']=shop.payment_default_id.id
  9. return {'value':v}

当编辑shop_id表单字段时,sale_order对象的onchange_shop_id方法会被调用,并且返回一个字典,其中‘value’关键字包含在’project_id’, ‘pricelist_id’, ‘payment_default_id’字段中新值来使用的字典。

我们注意到除了字段值,更改更多的东西是可能的。例如,可以更改字段值和其他字段的domain,这个更改通过表单的返回值:return {‘domain’: d, ‘value’: value}

returns:

一个字典有以下关键字任意的混合:

    domain

    {field: domain}的一个映射

    这个返回的domains在字段上设置,而不是之前默认的。

    value

    field: value}的映射,这个值将会在相对应的字段上设置,可能触发新的改变或是属性的改变。

    warning

    有关键字title和message(两个是必须的)的字典。指出显示给用户的错误信息。