在odoo的many2one字段中限制"创建和编辑"权限,可以通过以下步骤实现:
下面是一个示例代码:
from odoo import models, fields, api
class MyModel(models.Model):
_name = 'my.model'
name = fields.Char(string='Name')
related_model = fields.Many2one('other.model', string='Related Model')
user = fields.Many2one('res.users', string='User', default=lambda self: self.env.user)
can_edit = fields.Boolean(compute='_compute_can_edit', string='Can Edit')
@api.depends('user')
def _compute_can_edit(self):
for record in self:
record.can_edit = record.user == self.env.user or self.env.user.has_group('base.group_system')
在上述示例中,我们创建了一个名为"my.model"的新模型,其中包含了一个many2one字段"related_model",一个用户字段"user",以及一个计算字段"can_edit"。计算字段"_compute_can_edit"通过判断当前用户是否与记录的用户相同,或者当前用户是否属于系统管理员组来确定是否有权限编辑该记录。
接下来,在视图中使用新模型的字段替换many2one字段,并设置相应的权限。例如,在XML视图中:
<record id="my_model_form_view" model="ir.ui.view">
<field name="name">my.model.form.view</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name"/>
<field name="related_model" options="{'no_create_edit': True}"/>
<field name="user" readonly="1"/>
<field name="can_edit" invisible="1"/>
</group>
</sheet>
</form>
</field>
</record>
在上述示例中,我们使用了"options"属性将"related_model"字段的"no_create_edit"选项设置为True,以禁止创建和编辑相关模型的记录。同时,我们将"user"字段设置为只读(readonly="1"),并将"can_edit"字段设置为不可见(invisible="1")。
这样,当用户在创建或编辑"my.model"记录时,只能选择现有的相关模型记录,并且无法创建或编辑相关模型的记录。
领取专属 10元无门槛券
手把手带您无忧上云