2016-01-20 30 views
0

在我的模塊中,我必須創建一個視圖來爲部門設置目標。在創建表單視圖中,有一個下拉(與hr.department相關的many2one字段),帶有選擇小部件以選擇部門。我有2個要求:Odoo僅在創建視圖中爲域添加域

  1. 部門下拉應該被過濾。
  2. 過濾只能在創建視圖中進行。

我試過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 

感謝一種幫助

回答

0

,你可以採取什麼樣的考慮就是當你在「創建視圖」中,當前記錄(在這種情況下hr_appraisal_goal_department記錄)將沒有ID,但是,如果你編輯在「編輯視圖」,記錄早已ID

所以你可以在設置域時使用這個條件。

+0

謝謝。但是我們如何在fields_view_get方法中檢查ID的值?我們沒有獲得當前記錄的值是不是? – javatar

+0

你說得對,'fields_view_get'帶來一個空的記錄集。我沒有嘗試,所以我不知道下面是否會起作用,只是一個想法,但我想你必須重新定義'many2one'部門字段,並從Python代碼中的域屬性中調用一個方法。此方法必須返回一個域,所以使用if語句時,根據記錄是否有ID返回一個或另一個。 – forvas

+0

正是!我們可以從域調用方法嗎?我找不到任何方式來做到這一點:(在XML中給錯誤 – javatar