#python #xml #odoo-12
#python #xml #odoo-12
Вопрос:
Я хочу скрыть поле для некоторых пользователей, которые не входят в группу. Поле: телефон, модуль: 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>
-
Переопределение
phone
иmobile
полей для установки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')
Как найти mobile
кнопку в partner_form_send_sms_form_view
?
Комментарии:
1. Как вы использовали
phone
поле в представлениях?2. Кенли, это описано в base> views> res_partner_views
3. Итак, ошибка возникла не из вашего определения XML, проблема заключается в доступе к полю. Проверьте мой ответ ниже (рекомендация была слишком длинной)
Ответ №1:
Я полагаю, вы не использовали поле телефона в домене.
Многие представления наследуют представление партнера, sms.partner_form_send_sms_form_view
представление добавляет кнопку ( Send SMS
), которая использует поле телефона в attrs ( attrs="{'invisible':[('phone', '=', False)]}"
).
Даже если вы измените это, в представлении kanban будет ошибка ( TypeError: dict.record.phone is undefined
), которая проверяет phone
значение поля ( t-if="record.phone.raw_value">
), но вы можете просто избежать этого, проверив, существует ли поле phone, прежде чем пытаться получить его значение.
Вам необходимо обновить представление партнера в соответствии с вашими изменениями, потому что вы ограничили доступ к полю только для пользователей указанных групп.
Комментарии:
1. Kenly, т.е. там, где используется это поле, я должен проверить, имеет ли пользователь право?
2. Да, вам нужно изменить этот код. В заголовке вашего вопроса указано,
Hide field using group
ноgroups
атрибут используется для ограничения доступа к полю только для пользователей указанных групп. Если вам нужно использовать атрибут groups, вам нужно будет изменить код в зависимости от поля phone, например, в модуле SMS кнопкаSend SMS
отображается, когда задано значение поля phone, поэтому попробуйте ограничить доступ к этой кнопке с помощью групп в родительском div.3. Кенли, это работает для поля «телефон», но для поля «мобильный» нет :((
4. Вам также нужно ограничить доступ к мобильному полю?
5. Вы можете использовать
//div[@class='o_row'][2]/button
выражение для выбора второй кнопки.
Ответ №2:
Кенли, я хочу скрыть «электронную почту»:
email = fields.Char(groups='cmz_security_contacts.field_invisible_from_contacts')
Но когда я выбираю контакт:
Запрошенная операция не может быть завершена из-за ограничений безопасности. Пожалуйста, свяжитесь с вашим системным администратором.
(Тип документа: Контакт, Операция: чтение) — (Пользователь: 125, Поля: электронная почта) Почему я получаю это сообщение, если ограничение установлено только для поля? Почему я не получил его для полей phone и mobile? Спасибо.
Комментарии:
1. Если это часть вашего вопроса, вам нужно просто отредактировать его и добавить больше деталей, если не задать новый вопрос. Я не был уведомлен, и чтобы уведомить меня, используя мое имя, вам нужно добавить
@
в начале. Вы должны удалить этот ответ и отредактировать свой вопрос выше или задать новый.