我正在尝试创建表单视图。
<field name="is_positive" attrs="{'readonly':[('state','==','final')]}"/>
然而,有许多属性,例如与授权相关的组和不可见,因此某些人可以看到该字段。
groups="base.group_hr_user"
但是,有某种方法可以让某些群体可以编辑该字段,而另一组则不能吗?
答案 0 :(得分:3)
首先,您不能使用像这样的域
<field name="is_positive" attrs="{'readonly':[('state','==','final')]}"/>
没有'=='
运算符,请改用=
。
现在,为了回答你的问题,如果你想为另一个组创建一个特殊视图,其中一些元素只读一个组,另一个组可以编辑,你必须这样做。
对于默认视图:
<record id="some_model_view" model="ir.ui.view">
<field name="name">some.model.form</field>
<field name="model">some.model</field>
<field name="arch" type="xml">
<form>
<field name="some_field" readonly="1"/>
</form>
<field/>
</record>
对于某个群体:
<record id="some_model_view_for_other_group" model="ir.ui.view">
<field name="name">some.model.form</field>
<field name="model">some.model</field>
<field name="inherit_id" ref="my_module.some_model_view"
<field name="groups_id" eval="[(6, 0, [ref('some.first_group')])]" />
<field name="arch" type="xml">
<field name="some_field" position="attributes">
<attribute name="readonly">0</attribute>
</field>
<field/>
</record>
答案 1 :(得分:3)
添加新字段以检查用户是管理员还是用户。
新的Api方法
check_user = fields.Boolean(string='user',compute='_compute_user_check')
@api.multi
def _compute_user_check(self):
if self.user_has_groups('purchase.group_purchase_manager'):
self.check_user =True
在视图中
<field name="is_positive" attrs="{'readonly':[('check_user','=','True')]}"/>
答案 2 :(得分:1)
我将展示一个示例,说明此功能在销售组中的运作方式。
我在销售订单行中设置单价字段只读我们选择用户组user:own documents only
该字段为 可编辑 其他两组user:All documets
和manager
首先,我创建一个布尔字段,用于检查用户属于哪个组
is_own_user = fields.Boolean(string="Own user", compute='compute_own_user')
当用户属于组用户时,则指定布尔字段为True
:仅限自己的文档分配给False
@api.depends('product_id')
def compute_own_user(self):
res_user_id = self.env['res.users'].search([('id', '=', self._uid)])
for rec in self:
if res_user_id.has_group('sales_team.group_sale_salesman') and not res_user_id.has_group('sales_team.group_sale_salesman_all_leads'):
rec.is_own_user = True
else:
rec.is_own_user = False
在xml中使is_own_user不可见并替换单价字段
<xpath expr="//notebook/page/field[@name='order_line']/tree/field[@name='price_unit']" position="replace">
<field name="price_unit" attrs="{'readonly': [('isown_user', '=', True)]}" />
</xpath>