3

以下と同じ create メソッドを使用したいということodoo 10は、odoo 10 で以下のコードを変換したいという意味で、below codeうまく機能しています。odoo 8

def create(self, cr, uid, vals, context=None):
    phase_obj = self.pool.get('hr_evaluation.plan.phase')
    survey_id = phase_obj.read(cr, uid, vals.get('phase_id'), fields=['survey_id'], context=context)['survey_id'][0]

    if vals.get('user_id'):
        user_obj = self.pool.get('res.users')
        partner_id = user_obj.read(cr, uid, vals.get('user_id'), fields=['partner_id'], context=context)['partner_id'][0]
    else:
        partner_id = None

    user_input_obj = self.pool.get('survey.user_input')

    if not vals.get('deadline'):
        vals['deadline'] = (datetime.now() + timedelta(days=28)).strftime(DF)

    ret = user_input_obj.create(cr, uid, {'survey_id': survey_id,
                                          'deadline': vals.get('deadline'),
                                          'type': 'link',
                                          'partner_id': partner_id}, context=context)
    vals['request_id'] = ret
    return super(hr_evaluation_interview, self).create(cr, uid, vals, context=context)

私は以下のコードを試しています:

def create(self, vals):
    survey_id = self.env['hr_evaluation.plan.phase'].read(vals.get('phase_id'),fields=['survey_id'])['survey_id'][0]

    if vals.get('user_id'):
        partner_id = self.env['res.users'].read(vals.get('user_id'), fields=['partner_id'])['partner_id'][0]
    else:
        partner_id = None

    if not vals.get('deadline'):
        vals['deadline'] = (datetime.now() + timedelta(days=28)).strftime(DF)

    ret = self.env['survey.user_input'].create({'survey_id': survey_id,
                                          'deadline': vals.get('deadline'),
                                          'type': 'link',
                                          'partner_id': partner_id})
    vals['request_id'] = ret
    return super(hr_evaluation_interview, self).create(vals)

しかし、それは私にエラーを与えているTypeError: read() got multiple values for keyword argument 'fields'ので、どうすればこのエラーを取り除くことができますか?

4

1 に答える 1

3

readメソッドが引数として受け入れfields、2 つの引数を指定します。

read([fields])

自己の低レベル/RPC メソッドでレコードの要求されたフィールドを読み取ります。Python コードでは、browse() を優先します。

Parameters
    fields -- list of field names to return (default is all fields)
Returns
    a list of dictionaries mapping field names to their values, with one dictionary per record
Raises
    AccessError -- if user has no read rights on some of the given records  

メソッドを呼び出す代わりに、readメソッドを呼び出すほうがよいです。Odoo 8 で Browse() と read() のパフォーマンスを比較browse()できます。

コードは次のようになります。

def create(self, vals):
    survey_id = self.env['hr_evaluation.plan.phase'].browse(vals.get('phase_id'))

    if vals.get('user_id'):
        partner_id = self.env['res.users'].browse(vals.get('user_id'))
    else:
        partner_id = None

    if not vals.get('deadline'):
        vals['deadline'] = (datetime.now() + timedelta(days=28)).strftime(DF)

    ret = self.env['survey.user_input'].create({'survey_id': survey_id.id,
                                          'deadline': vals.get('deadline'),
                                          'type': 'link',
                                          'partner_id': partner_id.id})
    vals['request_id'] = ret.id
    return super(hr_evaluation_interview, self).create(vals)
于 2016-12-28T08:11:17.370 に答える