【问题标题】:Hide field using group使用组隐藏字段
【发布时间】:2020-09-08 09:06:08
【问题描述】:

我想为一些不在组中的用户隐藏该字段。 字段:电话,模块:res_partner

为此,我通过添加一个组来覆盖该字段:

from odoo import api, fields, models


class Partner(models.Model):
    _inherit = 'res.partner'

    phone = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')

创建的群组:

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="0">
         <record id="group_contact_user" model="res.groups">
            <field name="name">User</field>
            <field name="category_id" ref="base.module_category_contacts"/>
            <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
        </record>

        <record id="group_contact_manager" model="res.groups">
            <field name="name">Manager</field>
            <field name="category_id" ref="base.module_category_contacts"/>
            <field name="implied_ids" eval="[(4, ref('group_contact_user'))]"/>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
        </record>

        <record id="field_invisible_from_contacts" model="res.groups">
            <field name="name">Field invisible from contacts</field>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
        </record>
    </data>
</odoo>

具有“用户”权限的“普通”用户。当我点击某个联系人时:错误:“域中的未知字段电话”为什么?

编辑:

  • 继承sms.partner_form_send_sms_form_view

      <odoo>
          <record id="partner_form_send_sms_form_view_secure" model="ir.ui.view">
              <field name="name">res.partner.form.send.sms.secure</field>
              <field name="model">res.partner</field>
              <field name="inherit_id" ref="sms.partner_form_send_sms_form_view"/>
              <field name="priority">10</field>
              <field name="arch" type="xml">
                  <xpath expr="//button[@name=%(sms.send_sms_form_action)d]" position="attributes">
                         <attribute name="groups">cmz_security_contacts.field_invisible_from_contacts</attribute>
                  </xpath>
              </field>
          </record>
      </odoo>
    
  • 覆盖phonemobile 字段以设置groups 属性

      from odoo import api, fields, models
    
      class Partner(models.Model):
          _inherit = 'res.partner'
    
          phone = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')
          mobile = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')  
    

如何在partner_form_send_sms_form_view 中找到mobile 按钮?

【问题讨论】:

  • 您如何在视图中使用phone 字段?
  • Kenly,这在 base>views>res_partner_views 中有描述
  • 所以错误不是来自您的 XML 定义,问题出在字段访问中。在下面查看我的答案(推荐太长)

标签: python xml odoo-12


【解决方案1】:

我想您没有在域中使用电话字段。

许多视图都继承了合作伙伴视图,sms.partner_form_send_sms_form_view 视图添加了一个按钮 (Send SMS),它使用 attrs (attrs="{'invisible':[('phone', '=', False)]}") 中的电话字段。

即使您更改它,在检查phone 字段值(t-if="record.phone.raw_value"&gt;)的看板视图中也会出现错误(TypeError: dict.record.phone is undefined),但您可以通过检查之前是否存在电话字段来避免这种情况试图获得它的价值。

您需要根据您的更改更新合作伙伴视图,因为您将字段访问权限仅限于给定组的用户。

【讨论】:

  • 肯利,即这个字段用在哪里,一定要检查用户是否有权限?
  • 是的,您需要更改该代码。您的问题标题为Hide field using group,但groups 属性仅用于限制对给定组的用户的字段访问。如果您需要使用组属性,您将需要根据电话字段更改代码,例如在 SMS 模块中,当设置电话字段的值时会显示按钮 Send SMS,因此请尝试限制对该字段的访问使用父 div 上的组按钮。
  • Kenly,这适用于“电话”字段,但对于“移动”字段没有 :((
  • 您也需要限制对移动领域的访问?
  • 您可以使用//div[@class='o_row'][2]/button 表达式来选择第二个按钮。
【解决方案2】:

肯利,我想隐藏“电子邮件”:

email = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')

但是当我选择一个联系人时: 由于安全限制,请求的操作无法完成。请联系您的系统管理员。

(文档类型:联系人,操作:已读)-(用户:125,字段:电子邮件) 如果仅在某个字段上设置了限制,为什么我会收到此消息? 为什么我没有为 field phone 和 mobile 获得它? 谢谢。

【讨论】:

  • 如果这是您问题的一部分,如果不提出新问题,您只需对其进行编辑并添加更多详细信息。我没有收到通知,如果要使用我的名字通知我,您需要在开头添加 @。您应该删除此答案并在上面编辑您的问题或提出新问题。
猜你喜欢
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多