context 如何在视图中使用场景

发布时间 2023-07-19 17:16:42作者: *感悟人生*

上一篇文章,我们讨论了在py文件中使用context的问题。
   今天我来讨论一下。在XML视图中的使用情况 :

在 Odoo 中,视图可以用来定义用户界面。在视图中,你可以使用 context 来改变字段的默认值或者控制字段的可见性。

下面是一些在视图中使用 context 的例子:

  1. 设置字段的默认值:

在视图中,你可以使用 context 属性来设置字段的默认值。这个属性应该是一个字典,包含你想要设置的默认值。

例如,如果你想要在创建新的合作伙伴时,默认将 'is_company' 字段设置为 True,你可以在视图中这样做:

<record id="view_partner_form" model="ir.ui.view">
    <field name="name">res.partner.form</field>
    <field name="model">res.partner</field>
    <field name="arch" type="xml">
        <form string="Partner">
            ...
            <button name="%(base.action_res_partner_form)d"
                    type="action"
                    string="New Partner"
                    context="{'default_is_company': True}"/>
            ...
        </form>
    </field>
</record>

在这个例子中,当用户点击 "New Partner" 按钮时,将打开一个新的合作伙伴表单,其中 'is_company' 字段的默认值将被设置为 True。

 

  1. 控制字段的可见性:

在视图中,你也可以使用 context 来控制字段的可见性。具体来说,你可以使用 attrs 属性来根据 context 中的某个值显示或隐藏字段。

例如,如果你想要在当前用户是管理员时显示一个字段,你可以在视图中这样做:

<record id="view_partner_form" model="ir.ui.view">
    <field name="name">res.partner.form</field>
    <field name="model">res.partner</field>
    <field name="arch" type="xml">
        <form string="Partner">
            ...
            <field name="vat" attrs="{'invisible': [('context_is_admin', '=', False)]}"/>
            ...
        </form>
    </field>
</record>

在这个例子中,'vat' 字段只有在 'context_is_admin' 的值为 True 时才可见。'context_is_admin' 应该是在某个地方(比如在动作或者在服务器端的方法中)设置到 context 中的。

需要注意的是,在视图中使用 context 需要谨慎,因为这可能会使你的代码更难理解和维护。你应该尽量避免在视图中添加复杂的逻辑,尤其是那些依赖于 context 的逻辑。