Odoo16实用功能之context参数详解

目录

1、context参数

1、视图中的context参数                             

2、模型方法中的context参数                          

3、动作中的context参数                            

4、上下文参数的传递和修改                            

2、视图中的context参数用法详解

1、 设置字段默认值

 2、控制搜索过滤器

 3、控制搜索视图中的默认搜索项

 4、控制分组和排序

5、 控制目标视图中的显示数据

 6、控制执行操作时传递的上下文信息

 7、在列表/编辑视图中使用上下文变量

8、控制动作/菜单项的target视图

3、模型方法中的context参数用法详解

1、默认值设置

 2、过滤和搜索

3、用户语言设置

4、禁用记录规则

5、执行用户上下文中的操作

4、动作中的context参数用法详解

1、默认值设置

2、过滤和搜索

3、使用用户上下文

4、禁用记录规则

5、执行其他上下文中的操作 


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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dear.爬虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值