Odoo17中的button按钮属性汇总

button按钮属性汇总,初学者的学习笔记

<button 
    name="action_name" 
    type="object|workflow|action"
    string="Button Label"
    class="css_classes..."
    icon="icon_name"
    context="{'key': 'value', ...}"
    states="state1,state2,..."
    confirm="Confirmation Message"
    attrs="{'invisible': condition, 'readonly': condition, ...}"  #odoo17已经弃用了
    groups="group1,group2,..."
/>
# attrs-invisible-readonly的示例操作这三个属性是视图上元素的公用属性
<field name="my_field" invisible="1"/>
<field name="my_field" invisible="'state', '=', 'draft'" />
<field name="my_field" readonly="1"/>
<field name="my_field" readonly="'state', '!=', 'confirmed'" />

常用属性

  • name:按钮触发的方法名或工作流信号的名称。
  • type:按钮类型,可以是 "object", "workflow", "action" 等。
  • string:按钮显示的文字标签。
  • class:CSS类名,用于添加额外样式。
  • icon:按钮左侧显示的图标名称,来自Odoo预定义的图标库。
  • context:键值对组成的字典,为按钮点击时传递给目标动作或方法的上下文变量。
  • states:逗号分隔的状态列表,按钮只在当前记录处于这些状态之一时可见。
  • confirm:点击按钮前弹出确认对话框显示的消息内容。
  • attrs<17版本已经弃用>:键值对组成的字典,用于设置按钮的动态属性,如 invisible 和 readonly,它们可以根据条件隐藏或禁用按钮。
  • groups:一组逗号分隔的用户组ID,只有属于这些用户组的用户才能看到和使用该按钮。

其它属性

  • id:为按钮指定一个唯一的ID,但通常不是必需的,因为系统会自动生成。
  • help:提供一个工具提示(tooltip)文本,在鼠标悬停时显示。
  • target:对于链接类型按钮(如 type="action"),可以指定目标打开方式,例如 _blank 会在新窗口打开。
  • special:某些情况下用于特殊类型的按钮,例如 "cancel"、"save" 或者 "create" 等预定义的特殊行为。
  • nolabel:如果设置为 True,则不显示按钮标签文字,只显示图标。

另外,还有一些通过 attrs 属性内嵌的动态属性,比如:

  • aria-disabled:辅助功能属性,可以配合JavaScript使用来指示按钮是否对屏幕阅读器等辅助技术禁用。

type 属性类型的行为:

  • "object":

当 type="object" 时,点击按钮会触发模型(model)上的一个方法。这个方法需要在对应的Python模型文件中定义,并且方法名要与XML视图中按钮的 name 属性值相匹配。当按钮被点击时,Odoo将执行该方法并传递当前记录的上下文和数据。

  • "workflow":

当 type="workflow" 时,点击按钮会发送一个工作流信号(workflow signal)。这意味着它会触发一个已配置好的工作流中的某个活动或过渡。例如,可以用来批准订单、完成任务等状态变更操作。

  • "action":

当 type="action" 时,点击按钮会打开一个新的窗口或者执行一个预定义的动作(action)。动作可能是打开一个新的视图、运行一个报告、导航到另一个菜单项或其他自定义行为。动作是在Odoo的工作流系统中预先配置的,通常用于导航和界面交互。

每种类型的按钮都对应着不同的业务逻辑处理方式,在Odoo开发过程中,根据具体需求选择合适的按钮类型来实现所需功能。

在Python代码中动态设置: 可以在模型的方法中通过 self.env.context 添加上下文变量来动态影响视图中元素的 invisible readonly 属性:

def action_change_visibility(self):
    for record in self:
        record.write({'my_field': 'some_value', 
                     'display_my_field': True, # 假设有一个字段记录是否显示另一个字段
                     })
        # 更新上下文以影响视图
        self.env.context.update({
            'invisible_my_field': not record.display_my_field,
            'readonly_my_field': record.state != 'editable',
        })
<field name="my_field" invisible="'invisible_my_field', '=', True" />
<field name="another_field" readonly="'readonly_my_field', '=', True" />

示例:form默认只显示主要的字段,详细内容字段被隐藏,button按钮当做功能开关使用,显示和关闭详单字段

<record id="view_your_model_form" model="ir.ui.view">
    <field name="name">your.model.form</field>
    <field name="model">your.model</field>
    <field name="arch" type="xml">
        <form>
            <!-- 其他字段 -->
            <field name="hidden_field1" invisible ="'show_hidden_fields', '=', False" />
            <field name="hidden_field2" invisible ="'show_hidden_fields', '=', False" />

            <!-- 功能开关按钮 调用模型中 toggle_hidden_fields 方法 注意 type="object"-->
            <button name="toggle_hidden_fields" type="object"
                    string="显示/隐藏功能区"
                    class="oe_highlight"/>
        </form>
    </field>
</record>

 

#your_models.py

class YourModel(models.Model):
    _name = 'your.model'

    # 定一从此字段,控制隐藏字段的显示情况
    show_hidden_fields = fields.Boolean(default=False)

    def toggle_hidden_fields(self):
        for record in self:
            #show_hidden_fields字段的取反操作,实现开关功能
            record.show_hidden_fields = not record.show_hidden_fields
        return True

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值