遇到個需求,財務審核報銷單的時候,需要填寫一個審核金額,此處審核金額應該在財務審核環節才能編輯,並且只能財務人員編輯。
第一反應跟compute或default一樣,直接寫readonly=_set_readonly,然后寫函數
@api.model def _set_readonly(self): if self.user_has_groups('hs_expenses.group_hs_expenses_financial_officer'): return False else: return True
這樣運行的時候會直接報錯,報錯內容大概是當前環境沒有user_has_groups對象。后來嘗試寫readonly=‘_set_readonly’,發現無論什么時候都成了False,估計readonly只要不等於True,Odoo就直接默認為False。
經過多次嘗試,想到一個曲線救國的方法,如下:
1. 定義一個boolean字段使用compute來獲取當前登錄用戶是否是可編輯的用戶組
current_user_is_financial = fields.Boolean(compute="_compute_current_user_is_financial")
def _compute_current_user_is_financial(self): self.current_user_is_financial = self.user_has_groups('hs_expenses.group_hs_expenses_financial_officer')
2. 在前端通過attrs設置readonly屬性
<field name="audit_amount" attrs="{'readonly': [('current_user_is_financial', '=', False)], 'required':[('state', '=', 'to_audited')]}"/>
這樣在財務人員到了審核環節的時候audit_amount字段就能編輯了,其他任何人員都不能編輯該字段。