2016-06-13 14 views
1
def _get_index_content(self, cr, uid, ids, fields, args, context=None): 
    res = dict.fromkeys(ids, '') 
    Attachment = self.pool.get('ir.attachment') 
    applicant_ids = self.pool.get('hr.applicant').search(cr, uid, [('email_from', '=', self.browse(cr, uid, ids, context=context).email_candidat)], context=context) 
    attachment_ids = Attachment.search(cr, uid, ['|', '&', ('res_model', '=', 'candidat.base'), ('res_id', 'in', ids), '&', ('res_model', '=', 'hr.applicant'), ('res_id', 'in', applicant_ids)], context=context) 
    for attachment in Attachment.browse(cr, uid, attachment_ids, context=context): 
     res[attachment.res_id] += attachment.index_content or '' 
    return res     


def _content_search(self, cr, user, obj, name, args, context=None): 
    record_ids = set() 
    Attachment = self.pool.get('ir.attachment') 
    ids = obj.search(cr, uid, []) 
    applicant_ids = self.pool.get('hr.applicant').search(cr, user, [('email_from', '=', self.browse(cr, user, ids, context=context).email_candidat)], context=context) 
    args = ['&'] + args + ['|', '&', ('res_model', '=', 'candidat.base'), ('res_id', 'in', ids), '&', ('res_model', '=', 'hr.applicant'), ('res_id', 'in', applicant_ids)] 
    att_ids = Attachment.search(cr, user, args, context=context) 
    record_ids = set(att.res_id for att in Attachment.browse(cr, user, att_ids, context=context)) 
    return [('id', 'in', list(record_ids))] 

'index_content':fields.function(_get_index_content、fnct_search = _content_search、文字列= '索引のコンテンツ'、タイプ= "テキスト")、どのように私はこのエラーを解決することができます:予想シングルトンcandidat(1,2,3,4)

予想されるシングルトンcandidat.base(1,2,3,4)がエラーとして発生しました。

+0

複数の結果が届いていますか? –

+0

はい複数の結果を受け取る可能性があります – Khadija

+0

https://github.com/odoo/odoo/issues/4377 「_複数のレコードを持つレコードセットからの読み取りを許可しないように振る舞いが変更されました。」 –

答えて

1
applicant_ids = self.pool.get('hr.applicant').search(cr, user, [('email_from', '=', self.browse(cr, user, ids, context=context).email_candidat)], context=context) 

idsが2つ以上のIDのリストである場合は機能しません。ブラウズでは2つのエントリのレコードセットが得られ、email_candidatのようなフィールド値を呼び出すことはできません。

applicant_ids = self.pool.get('hr.applicant').search(cr, user, [('email_from', 'in', [x.email_candidat for x in self.browse(cr, user, ids, context=context)])], context=context) 

と、おそらくそのコードを読みやすくするためにいくつかのより多くの行を使用します。

は次のようにすべての電子メールアドレスを検索してみてください。

+1

働いてくれてありがとう@CZoellner – Khadija

関連する問題