2016-04-27 67 views
2

我加入這個模塊base.candidat我想開一個特定的候選人(即具有相同的電子郵件作爲候選)的應用程序模塊「基地Candidat」我加入這個功能base_candidat.py如何從視圖中獲取過濾數據?

class base_candidat(osv.osv): 
    _columns = { 
     'candidat_name': fields.char('Candidat', size=128, required=True), 
     'blacklist': fields.boolean('Blacklist'), 
     'email_candidat': fields.char('Email', size=32), 
     'mobile': fields.char('Mobile', size=32), 
     'priority': fields.selection(AVAILABLE_PRIORITIES, 'Appreciation'), 
     'user_id': fields.many2one('res.users', 'Responsable'), 
     'specialite': fields.many2one('base.candidat.specialite', 'Spécialité'), 
    } 

    def action_get_applications(self, cr, uid, ids, context=None): 
     modelDataClass = self.pool.get('ir.model.data') 
     hrApplicantClass = self.pool.get('hr.applicant') 

     model, action_id = modelDataClass.get_object_reference(cr, uid, 'hr_recruitment', 'action_hr_job_applications') 
     action = self.pool.get(model).read(cr, uid, action_id, context=context) 
     email_ids = self.browse(cr, uid, ids[0], context).email_candidat 
     candidature_ids = hrApplicantClass.search(cr, uid, [('email_from', '=', email_ids)], context=context) 

     action['context'] = {'default_res_model': self._name, 'default_res_id': ids[0]} 
     action['domain'] = str([('candidature_ids', 'in', email_ids)]) 

     return action 

我沒有結果。有什麼建議麼??

+0

您的問題在此格式中很不清楚。我們可以看到模型中的字段嗎? – danidee

+0

字段:類base_candidat(osv.osv): _columns = { 'candidat_name':fields.char('Candidat',size = 128,required = True), 'blacklist':fields.boolean('Blacklist '), 'email_candidat':fields.char('Email',size = 32), 'mobile':fields.char('Mobile',size = 32), 'priority':fields.selection(AVAILABLE_PRIORITIES, 'appreciation'), 'user_id':fields.many2one('res.users','Responsable'), 'specialite':fields.many2one('base.candidat.specialite','Spécialité'), – Khadija

回答

0

如果我很清楚,'action'是一個不允許的變量名。如果你使用它,程序將不一致。 (有同樣的情況「主動」)

在我看來,這個領域表情不是這一行正確:
action['domain'] = str([('candidature_ids', 'in', email_ids)])
因爲這意味着你的模型具有candidature_ids領域,但該模型還沒有,所以這種情況下可以」不滿意,所以當你使用它時你看不到任何記錄。
您的概念的另一個問題,email_ids是字符串(不是數字,所以變量名稱是欺騙性的)並且candidature_ids是一個數字列表。

在我看來,你想寫一個函數字段。這是一個示例代碼,它可能不是最佳性能,但我認爲它會幫助您瞭解功能領域的本質:

def _getApplications(self, cr, uid, ids): 
    hrApplicantClass = self.pool.get('hr.applicant') 

    # get all of candidate 
    candidateDatas = self.read(cr, uid, ids, ['email_candidat']) 

    # collect all of emails 
    emails = [] 
    for candidate in candidateDatas: 
     if candidate['email_candidat'] not in emails: 
      emails.append(candidate['email_candidat']) 

    # get all of relevant applicant 
    applicantIds = hrApplicantClass.search(cr, uid, [('email_from', 'in', emails)]) 
    applicantDatas = hrApplicantClass.read(cr, uid, applicantIds, ['email_from']) 

    # pair base_candidat id with application id 
    retVal = {} 
    for candidate in candidateDatas: 
     retVal[candidate['id']] = [] 
     if not candidate['email_candidat']: 
      continue 
     else: 
      for applicant in applicantDatas: 
       if applicant['email_from'] == candidate['email_candidat']: 
        retVal[candidate['id']].append(applicant['id']) 

    return retVal 

# the field definition 
'application_ids': fields.function(_getApplications, method=True, type='one2many', 'Applications') 
+0

但是當我使用相同的功能,而不需要精確的操作[域],我可以看到所有的應用程序。你有什麼建議嗎 ?我可以修改域名還是使用其他方式?預先感謝 – Khadija

+0

我的經驗有時可行,所以我說這個功能會不一致。 –

+0

答案已更新。 –

相關問題