Odoo 函数字段

Odoo Function field

我正在尝试创建一个函数字段

class base_candidat_specialite(osv.osv):
    """ Spécialité du candidat """
    _name = "base.candidat.specialite"
    _description = "Spécialité du candidat"
    _columns = {
        'name': fields.char('Name', required=True),
        'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of degrees."),
    }
    _defaults = {
        'sequence': 1,
    }
    _sql_constraints = [
       ('name_uniq', 'unique (name)', 'Le nom de la specialité doit etre unique')
    ]

class base_candidat(osv.osv):
    _name = 'base.candidat'

    def _application(self, cr, uid, ids, fields, arg, context=None):
    res = {}
    _candidat = self.pool.get('base.candidat')
    candidat = _candidat.browse(cr, uid, ids[0], context=context)
    _application = self.pool.get('hr.applicant')
    if candidat:
        for _obj in self.browse(cr, uid, ids, context=context):
            _applications = _application.search(cr, uid, [('email_from', '=', candidat.email_candidat)], context=context)
            res[_obj.id] = [(6, 0, _applications)]

    return res

_colunms{
'candidat_name': fields.char('Candidat', size=128, required=True),
    'active': fields.boolean('Active', help="If a candidat is not active, it will not be displayed in module"),
    'blacklist': fields.boolean('Blacklist'),
    'email_candidat': fields.char('Email', size=32),
    'mobile': fields.char('Mobile', size=32),
    'description': fields.text('Description'),
    'probability': fields.float('Probability'),
    'create_date': fields.datetime('Creation Date', readonly=True, select=True),
    'write_date': fields.datetime('Update Date', readonly=True),
    'date_closed': fields.datetime('Closed', readonly=True, select=True),
    'date_open': fields.datetime('Assigned', readonly=True, select=True),
    'date_action': fields.date('Next Action Date'),
    'title_action': fields.char('Next Action', size=64),
    'reference': fields.char('Referred By'),
    'user_id': fields.many2one('res.users', 'Responsable'),
    'specialite': fields.many2one('base.candidat.specialite', 'Specialite'),
    'liensource': fields.char('Lien Source'),
    'type_id': fields.many2one('hr.recruitment.degree', 'Niveau de formation'),
    'niveau_experience': fields.many2one('hr.recruitment.degree', 'Niveau d"experience'),
    'source_id': fields.many2one('hr.recruitment.source', 'Source'),
    'categ_ids': fields.many2many('hr.applicant_category', string='Tags'),
    'candidature_ids': fields.function(_application, string="Candidature", type="one2many", relation='hr.applicant'),
}

创建记录时出错

ProgrammingError: ARRAY types integer and boolean cannot be matched LINE 1: ...bourkia', 'abourkiakhadija', true, ARRAY[ARRAY[6, false, '{}...

您应该这样声明您的职能领域:

'candidature_ids': fields.function(_application, method=True, string="Candidature", type="many2many", relation='hr.applicant')

以及方法:

def _application(self, cr, uid, ids, fields, arg, context=None):
    app_obj = self.pool.get('hr.applicant')
    res = {}
    for cand in self.browse(cr, uid, ids, context=context):
        res[cand.id] = [(6, 0, app_obj.search(cr, uid, [
            ('email_from', '=', cand.email_candidat),
        ], context=context)
    return res

预期的 return 值是一个字典,键是记录 ID,值是简单 ID 列表。
例如:{1: [23,32,41], 5: [], 78: [234, 55, 56, 78, 343, 55]}

您的代码将无法运行,因为键必须包含所有 base_base_candidat,而值必须包含来自 hr.applicant 的 ID。 所以这段代码在这里被破坏了:ids[0]

我无法理解您使用魔法参数 [(6, '0', _applications)] 的代码。
如果你写你想码的,我会帮你更多!