【问题标题】:How can I get filtred data from a view?如何从视图中获取过滤后的数据?
【发布时间】:2016-04-27 16:26:56
【问题描述】:

我在这个模块base.candidat中添加了一个模块“Base 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

我没有结果。有什么建议吗??

【问题讨论】:

  • 您的问题在这种格式下非常不清楚。我们可以看到您模型中的字段吗?
  • 字段:class base_candidat(osv.osv): _columns = { 'candidat_name': fields.char('Candidat', size=128, required=True), 'blacklist': 字段。 boolean('Blacklist'), 'email_candidat': fields.char('Email', size=32), 'mobile': fields.char('Mobile', size=32), 'priority': fields.selection(AVAILABLE_PRIORITIES , '欣赏'), 'user_id': fields.many2one('res.users', 'Responsable'), 'specialite': fields.many2one('base.candidat.specialite', 'Specialité'),

标签: python xml openerp


【解决方案1】:

如果我知道的话,'action' 是一个不允许的变量名。如果使用它,程序将不一致。 (与“活动”相同的情况)

在我看来,这个域表达式在这一行中是不正确的:
action['domain'] = str([('candidature_ids', 'in', email_ids)])
因为这意味着你的模型有candidature_ids字段,但是模型没有,所以这个条件不能满足,所以你在使用它时看不到任何记录。
你的概念的另一个问题,@987654323 @ 是字符串(不是数字,所以变量名具有欺骗性),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')

【讨论】:

  • 但是当我使用相同的功能而不精确操作[域]时,我可以看到所有的应用程序。你有什么建议吗 ?我应该修改域还是使用其他方式??提前致谢
  • 我的经验是有时会起作用,所以我说这个功能会不一致。
  • @KhadijaAB base_candidat 和 hr_applicant 有什么关系?我不明白要过滤什么。
  • 在 basecandidat 中创建的每个候选人可能在 hr_applicant 中针对不同的 job_id 有不同的应用程序。因此,我想在基础候选人中获得具有姓名、电子邮件的特定记录(候选人)。我想查看与他相关的所有应用程序(具有相同的电子邮件)。
  • 我无法理解所有这些方法概念。在我看来,你想要一个函数字段。
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 2019-09-11
  • 2014-06-01
  • 1970-01-01
  • 2012-04-18
相关资源
最近更新 更多