如何仅在从part.one表单视图访问时触发test.lines记录规则
解决方案
要实现仅从part.one表单访问test.lines时触发记录规则,核心思路是通过上下文(context)标记访问来源,再在记录规则中根据上下文判断是否生效。
步骤1:在视图中传递来源标记
修改part.one和part.two的表单视图,给对应的one2many字段添加专属上下文参数,用来标记当前访问来源:
part.one的表单视图(XML)
<field name="test_lines" context="{'from_part_one': True}"/>
part.two的表单视图(XML)
<field name="test_lines" context="{'from_part_one': False}"/>
这样当用户从part.one打开test.lines的列表/表单时,上下文会携带from_part_one: True;从part.two打开时则携带False。
步骤2:修改test.lines的记录规则
编辑你已配置的test.lines记录规则,在原有domain条件基础上,添加上下文判断逻辑。
假设原记录规则的domain是[('some_field', '=', 'some_value')],修改后的domain需要结合上下文:
[('some_field', '=', 'some_value'), ('from_part_one', '=', True)]
这里的from_part_one是从上下文中读取的动态参数,Odoo会自动识别上下文里的键值对作为domain的条件。
注意:如果是通过界面配置记录规则,直接在domain输入框中写:
[('some_field', '=', 'some_value'), '&', (1, '=', 1), 'context.get("from_part_one", False)'](
(1, '=', 1)是占位符,用来衔接逻辑与操作符&,确保上下文判断与原有条件同时生效)
额外注意事项
- 如果需要在创建
test.lines记录时也保持规则生效,上面的视图配置已经覆盖了这个场景,从part.one创建时上下文会自动传递到新记录的表单视图。 - 若存在批量操作或API调用的场景,需要手动传递对应的上下文参数,否则记录规则可能不会按预期触发。
内容的提问来源于stack exchange,提问作者Hiren Umraliya
相关产品推荐
相关产品推荐

