Python 如何从视图中获取过滤后的数据?
我在这个模块库中添加了一个模块“Base candidate”。candidate我想打开一个特定候选人的应用程序(与候选人有相同的电子邮件),我将此功能添加到Python 如何从视图中获取过滤后的数据?,python,xml,openerp,Python,Xml,Openerp,我在这个模块库中添加了一个模块“Base candidate”。candidate我想打开一个特定候选人的应用程序(与候选人有相同的电子邮件),我将此功能添加到Base\u candidate.py class base_candidat(osv.osv): _columns = { 'candidat_name': fields.char('Candidat', size=128, required=True), 'blacklist': fields
Base\u candidate.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
我没有结果。有什么建议吗???如果我知道得很清楚,“action”是一个不允许的变量名。如果您使用它,程序将不一致。(与“活动”的情况相同)
在我看来,这一行中的域表达式不正确:
action['domain']=str([('candidate\u id','in',email\u id)])
因为这意味着你的模型有
candidate\u id
字段,但模型没有,所以这个条件不能满足,所以你在使用它时看不到任何记录。你的概念的另一个问题,
email\u id
是字符串(不是数字,所以变量名是假的)而候选资格\u id
是一个数字列表。在我看来,您需要编写一个函数字段。这是一个示例代码,它可能不是最佳性能,但我认为它将帮助您理解函数字段的本质:
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')
你的问题在这种形式下很不清楚。我们可以看到您模型中的字段吗?以下字段:class base_candidate(osv.osv):\u columns={'candidate_name':fields.char('candidate',size=128,required=True),'blacklist':fields.boolean('blacklist'),'email_candidate':fields.char('email',size=32),'mobile':fields.char('mobile','size=32),'priority':fields.selection(可用的'u PRIORITIES','premission'),'user'id':fields.manyOne('res.users','responsible'),'specialite':fields.manyOne('base.candidate.specialite','Spécialit'),但当我使用相同的函数而不精确操作[domain]我可以看到所有的应用程序。你有什么建议吗?我应该修改域还是用另一种方法?提前感谢我的经验有时是可行的,这就是为什么我说这个函数会不一致。@KhadijaAB基本申请人和人力资源申请人之间的关系是什么?我不明白要筛选什么。好吧,每个候选人c在BaseCandidate中创建可以在hr中有不同的申请,申请不同的工作id。因此,我希望在BaseCandidate中有一个特定的记录(候选人),他有一个名字,电子邮件。我希望看到所有与他相关的申请(他有相同的电子邮件).我无法理解所有这些方法概念。在我看来,您需要一个函数字段。