2016-04-27 32 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

答案已更新。 –

相关问题