這個問題從這裏開始: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