如何根据其他字段值改变OpenERP选择字段中的选项?

3 投票
3 回答
8045 浏览
提问于 2025-04-17 07:23

我有一个表单,里面有四个字段:

  • 作物 - 选择项
  • 开始日期 - 日期
  • 结束日期 - 日期
  • 区域 - 选择项

我想让“区域”这个选项的可选项根据用户在其他字段中选择的值来变化,应该怎么做呢?

3 个回答

1

试试 on_change 函数。创建一个 on_change 函数,并在函数的最后返回字段 block_area 的条件。

比如说:

def onchange_for_block_area(self,cr,uid,ids,crop,from_date,to_date,context):
    domain=[]
    #
    #some statements for finding the domain
    #
    return {'domain':{'block_area': domain}}

在字段 crop、from_date 和 to_date 上提供 on_change 函数。

1

为了根据其他字段的值来限制可用的选项,你可以使用 domain。举个例子,这在标准模块 project_issue 中就有应用:

引用相关的代码行:

class project_issue(crm.crm_case, osv.osv):
    _columns = {
        'project_id':fields.many2one('project.project', 'Project'),
        'type_id': fields.many2one ('project.task.type', 'Stages', domain="[('project_ids', '=', project_id)]"),
    }

在这个例子中,type_id 的可用选项是从 project.task.type 表中获取的,这取决于 project_id 字段的值。

2

我不太确定你能否在选择框中做到这一点,但你可以在一个字段的值改变时,改变另一个字段的范围。其实,你也可以直接使用你在BlockArea字段中其他字段的范围,可能根本不需要改变它。你可以看看合作伙伴地址界面是如何设置state_id字段的范围的。你可能会觉得这个相关问题也很有帮助。

如果你确实需要在另一个字段改变时改变范围,那么可以使用on_change事件,在它返回的字典中包含一个domain条目。

我发现有个讨论串提到你可以在多对一字段上使用选择控件,如果你为这个字段设置了domain,那么这可能对你有用。我自己还没有尝试过。

撰写回答