这个问题从这里开始:How to manage security with One2many fields in Odoo?。但是现在,我简化了这个问题,问题不一样。如何管理Odoo 8中的相关字段和权限?
的环境和问题是相同的:
class mother(models.Model):
_name = 'mother'
name = fields.Char(string='Name', size=64, required=True)
is_a_good_mother = fields.Boolean(string='Is a good mother?')
@api.multi
def write(self, vals):
_logger.info('I DO NOT KNOW WHY WHEN CREATING A CHILD THIS ORM '
'METHOD IS BEING EXECUTED, RECEIVING THE KEY '
'is_a_good_mother')
return super(mother, self).write(vals)
class child(models.Model):
_name = 'child'
mother_id = fields.Many2one(comodel_name='mother',
string='Mother', ondelete='cascade')
has_a_good_mother = fields.Boolean(
string='Does the child have a good mother?',
related='mother_id.is_a_good_mother',
related_sudo=True)
我有打开儿童形式的菜单选项。此表单由Odoo自动生成。
问题
我有谁可以创建和修改的孩子,而不是母亲的用户。当该用户创建该孩子时,安全错误会提示用户属于无法修改模型的组。这是由于行related='mother_id.is_a_good_mother'
,如果我删除它,并且我创建一个新的孩子,ORM write
方法母亲未被调用。
所以,如果乙具有了个关子指着一个任何领域,与您共创乙的新纪录,ORM write
的方法的被调用。
我有一个安全组my_group,与read 1 create 1 write 1 unlink 1
在乙和read 1 create 0 write 0 unlink 0
在甲。由于此群组的用户无法编写A,因此创建B记录时发生错误。
我该如何避免这个错误?我曾尝试过related_sudo=True
,但它没有奏效,可能是我没有很好地使用它。
任何人都可以帮助我吗?
用于创建子项的表单是否包含“has_a_good_mother”字段?如果是这样的字段只读或不是? –
是的,它的确如此,它不是只读的。 – forvas
@LudwikTrammer这就是问题所在!我必须将相关字段设置为只读,否则调用ORM'write'方法。把你的评论作为答案,我会把它设置为正确的。非常感谢你! – forvas