0
在我的模塊中,我必須創建一個視圖來爲部門設置目標。在創建表單視圖中,有一個下拉(與hr.department相關的many2one字段),帶有選擇小部件以選擇部門。我有2個要求:Odoo僅在創建視圖中爲域添加域
- 部門下拉應該被過濾。
- 過濾只能在創建視圖中進行。
我試過fields_view_get
,它對創建視圖工作正常。但問題是,在形式視圖和表單更新:(
這是fields_view_get
用我的代碼中發生過濾:
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
result = super(hr_appraisal_goal_department, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar, submenu)
if view_type=='form':
current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
dept_ids = []
for groups in current_user.groups_id:
if groups.name == "Define All Departmental Goals":
dept_ids= self.pool.get('res.users').search(cr, uid, [])
elif groups.name == "Define Departmental Goals Only to My Own Department":
dept_ids.append(current_user.employee_ids.department_id.id)
#there may be additional conditions in future
doc = etree.XML(result['arch'])
nodes = doc.xpath("//field[@name='department_id']")
for node in nodes:
node.set('domain', "[('id', 'in',["+','.join(map(str, dept_ids)) +"])]")
result['arch'] = etree.tostring(doc)
return result
感謝一種幫助
謝謝。但是我們如何在fields_view_get方法中檢查ID的值?我們沒有獲得當前記錄的值是不是? – javatar
你說得對,'fields_view_get'帶來一個空的記錄集。我沒有嘗試,所以我不知道下面是否會起作用,只是一個想法,但我想你必須重新定義'many2one'部門字段,並從Python代碼中的域屬性中調用一個方法。此方法必須返回一個域,所以使用if語句時,根據記錄是否有ID返回一個或另一個。 – forvas
正是!我們可以從域調用方法嗎?我找不到任何方式來做到這一點:(在XML中給錯誤 – javatar