如何根据其他字段值改变OpenERP选择字段中的选项?
我有一个表单,里面有四个字段:
- 作物 - 选择项
- 开始日期 - 日期
- 结束日期 - 日期
- 区域 - 选择项
我想让“区域”这个选项的可选项根据用户在其他字段中选择的值来变化,应该怎么做呢?
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
,那么这可能对你有用。我自己还没有尝试过。