Python 如何从视图中获取过滤后的数据?

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 candidate”。candidate我想打开一个特定候选人的应用程序(与候选人有相同的电子邮件),我将此功能添加到
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中有一个特定的记录(候选人),他有一个名字,电子邮件。我希望看到所有与他相关的申请(他有相同的电子邮件).我无法理解所有这些方法概念。在我看来,您需要一个函数字段。