Odoo12 字段根據用戶組設置readonly屬性


遇到個需求,財務審核報銷單的時候,需要填寫一個審核金額,此處審核金額應該在財務審核環節才能編輯,並且只能財務人員編輯。

第一反應跟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字段就能編輯了,其他任何人員都不能編輯該字段。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM