目录
1、context参数
context 参数用于在视图、模型方法和动作之间传递上下文信息。
上下文信息可以是键值对形式的字典,用于在特定的操作中传递额外的数据。
1、视图中的context参数
在定义视图时,可以使用context参数来传递上下文信息。
视图的按钮或字段上定义context,可以在相关的动作或模型方法中访问这些信息 <button> 标签中使用context属性来定义按钮触发的动作,并传递相关的上下文信息。 <field> 标签中使用context属性定义字段的上下文信息,例如默认过滤条件。
2、模型方法中的context参数
可以通过context参数访问传递给方法的上下文信息。
使用self.env.context可以获取上下文数据,并根据具体需要进行处理。
根据上下文中的特定字段值,执行不同的业务逻辑。
通过上下文中的过滤条件,筛选出需要的数据集合。
在创建、修改或删除记录时,从上下文中获取额外的数据。
3、动作中的context参数
在定义动作(Action)时,可以通过context参数来传递上下文信息
动作通常与视图或菜单项关联,用于定义用户在执行某个操作时的行为
在动作的目标视图中使用context属性传递上下文信息。
通过动作的context参数将数据传递给目标视图。
4、上下文参数的传递和修改
上下文参数可以在不同的环节进行传递和修改。
在视图或动作定义中指定默认的上下文参数。
在按钮或字段上使用context属性传递特定的上下文参数。
在模型方法中根据业务逻辑添加、修改或删除上下文参数。
使用context字典的update()方法对上下文参数进行更新。
使用context字典的get()方法获取具体的上下文参数值。
2、视图中的context参数用法详解
1、 设置字段默认值
将字段"field_name"的默认值设置为"default_value"
<field name="field_name" context="{'default_field_name': 'default_value'}"/>
2、控制搜索过滤器
控制搜索过滤器的默认选中状态,将会默认选中名为"My Filter"的过滤器
<search>
<filter name="my_filter" string="My Filter" context="{'search_default_my_filter': 1}"/>
</search>
3、控制搜索视图中的默认搜索项
会在搜索视图中将名为"field_name"的字段的搜索框中预填入"value"
<search string="Search" context="{'search_default_field_name': 'value'}">
<!-- Search fields -->
</search>
4、控制分组和排序
通过传递{'group_by': 'field_name'},将会默认按照"field_name"字段进行分组和排序。
<tree>
<field name="field_name" context="{'group_by': 'field_name'}"/>
</tree>
5、 控制目标视图中的显示数据
通过传递{'active_ids': [active_id], 'active_model': 'model_name'},将会在目标视图中显示与active_id相关联的数据,并将其关联模型设置为"model_name"
<field name="field_name" context="{'active_ids': [active_id], 'active_model': 'model_name'}"/>
6、控制执行操作时传递的上下文信息
通过传递{'key': 'value'},将会在执行动作时将键值对'key': 'value'作为上下文信息传递
<button name="action_name" context="{'key': 'value'}"/>
7、在列表/编辑视图中使用上下文变量
{'readonly': [('state', '=', 'done')]}表示当状态字段的值为"done"时,字段"field_name"将被设置为只读
<field name="field_name" attrs="{'readonly': [('state', '=', 'done')]}"/>
8、控制动作/菜单项的target视图
通过传递{'view_mode': 'form', 'force_detailed_view': True},将会以表单视图方式打开目标视图,并强制显示详细视图
<menuitem name="Menu Item" action="action_name" context="{'view_mode': 'form', 'force_detailed_view': True}"/>
3、模型方法中的context参数用法详解
1、默认值设置
你可以在视图中通过 context
参数设置默认值,以确保在创建、修改或执行其他操作时使用指定的默认值。
<button string="Create Record" type="object" name="create_record" context="{'default_name': 'Default Name'}"/>
模型方法中
@api.model
def create_record(self, name):
# 使用上下文中的默认值
default_name = self.env.context.get('default_name', 'Fallback Default')
new_record = self.create({'name': default_name})
return new_record
2、过滤和搜索
context
参数在执行搜索和读取记录时非常有用,可以用于传递过滤条件、排序规则等
@api.model
def search_records(self):
# 使用上下文中的过滤条件
domain = [('value', '>', 50)] + self.env.context.get('additional_domain', [])
records = self.search(domain)
return records
3、用户语言设置
context
中的 lang
键可以用于指定语言,这在多语言环境下很有用
@api.model
def get_translated_data(self):
# 使用上下文中的语言设置
lang = self.env.context.get('lang', 'en_US')
translated_name = self.with_context(lang=lang).name
return {'translated_name': translated_name}
4、禁用记录规则
context
中的 no_record_rules
键可用于禁用记录规则,适用于超级用户执行特殊操作时。
@api.model
def perform_special_action(self):
# 在上下文中禁用记录规则
result = self.with_context(no_record_rules=True).special_action()
return result
5、执行用户上下文中的操作
context
中的其他键可以用于传递各种信息,供模型方法根据需要使用。
@api.model
def custom_operation(self):
# 使用上下文中的自定义键
custom_value = self.env.context.get('custom_key', 'default_value')
result = self.do_something(custom_value)
return result
4、动作中的context参数用法详解
1、默认值设置
你可以在动作中使用 context
参数为相关记录设置默认值
<record id="action_open_form" model="ir.actions.act_window">
<field name="name">Open Form</field>
<field name="res_model">your.model</field>
<field name="view_mode">form</field>
<field name="view_id" ref="your.xml_form_view_id"/>
<field name="view_mode">form</field>
<field name="context">{'default_field_name': 'Default Value'}</field>
</record>
2、过滤和搜索
你可以在动作中使用 context
参数传递过滤条件,以确保在打开相关视图时只显示特定的记录
<record id="action_open_search" model="ir.actions.act_window">
<field name="name">Open Search View</field>
<field name="res_model">your.model</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="your.xml_tree_view_id"/>
<field name="context">{'search_default_field_name': 'Search Value'}</field>
</record>
3、使用用户上下文
你可以使用动作的 context
参数来传递用户上下文,以便在动作执行期间访问用户的设置
<record id="action_with_user_context" model="ir.actions.act_window">
<field name="name">Action with User Context</field>
<field name="res_model">your.model</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="your.xml_tree_view_id"/>
<field name="context">{'lang': 'fr_FR'}</field>
</record>
4、禁用记录规则
你可以在动作中使用 context
参数禁用记录规则,适用于超级用户执行特殊操作时
<record id="action_no_record_rules" model="ir.actions.act_window">
<field name="name">Action without Record Rules</field>
<field name="res_model">your.model</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="your.xml_tree_view_id"/>
<field name="context">{'no_record_rules': True}</field>
</record>
5、执行其他上下文中的操作
你可以在动作中使用 context
参数传递其他键值对,供动作执行期间访问
<record id="action_custom_context" model="ir.actions.act_window">
<field name="name">Action with Custom Context</field>
<field name="res_model">your.model</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="your.xml_tree_view_id"/>
<field name="context">{'custom_key': 'custom_value'}</field>
</record>