Как передать значения из поля one2many в другое поле в другой модели той же формы?изображение формы, представленное ниже (IAL) - PullRequest
0 голосов
/ 11 ноября 2018

МВЛ

one2many field name: survey_request_ids
model of one2many field : hr_evaluation.evaluation
Field name of 'Interviewer' inside one2many : user_id
model of 'Interviewer' inside one2many : hr.evaluation.interview

Я хочу создать новое поле «Интервьюер» под «Крайним сроком оценки» который будет иметь значения из нижеследующего поля «Интервьюер», которое находится в one2many.

Я пробовал вот так,

from openerp import models,fields,api

class hr_evaluation_interview(models.Model):
    _inherit = 'hr.evaluation.interview'

    @api.onchange('user_id')
    def _onchange_user_id(self):
        rec = self.env['hr_evaluation.evaluation'].search([('id','=', 
self.evaluation_id.id)])
        rec.update({
            'interviewer_ids': [(4,self.user_id.id)]
        })


class hr_evaluation_inherit(models.Model):
    _inherit = 'hr_evaluation.evaluation'

    _columns = {
        'interviewer_ids': fields.many2many('res.users', 
string='Interviewer',readonly=True)
    }

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете использовать вычисленное поле many2many. Метод вычисления вычислит все формы оценки и создаст набор записей, содержащий всех интервьюеров, которые отображаются во всех формах. Затем заполните поле many2many этим набором записей.

Это будет выглядеть примерно так:

def _compute_interviewer_ids(self):
    for record in self:
        interviewer_ids = []
        for appraisal_form in record.survey_request_ids:
            interviewer_ids.append(appraisal_form.interviewer_id.id)
        record.interviewer_ids = self.env['interviewer.model'].browse(interviewer_ids)


interviewer_ids = fields.Many2many('interviewer.model', compute='_compute_interviewer_ids', string='Interviewers')

Редактировать: здесь представлена ​​целая модель и ее подмодель, так что вы можете увидеть ее в контексте. Протестировано в v12.

from odoo import models, fields, api

class ExampleModel(models.Model):
    _name = 'example_module.example_model'
    _description = 'Example Model'

    def _compute_interviewer_ids(self):
        for record in self:
            interviewer_ids = []
            for appraisal_form in record.submodel_ids:
                interviewer_ids.append(appraisal_form.partner_id.id)
            record.interviewer_ids = self.env['res.partner'].browse(interviewer_ids)

    name = fields.Char()
    description = fields.Text()
    submodel_ids = fields.One2many('example_module.example_sub_model', 'examplemodel_id', 'SubModel Records')
    interviewer_ids = fields.Many2many('res.partner', compute='_compute_interviewer_ids', string='Interviewers')

class ExampleSubModel(models.Model):
    _name = 'example_module.example_sub_model'
    _description = 'Example Sub-model'

    name = fields.Char()
    examplemodel_id = fields.Many2one('example_module.example_model', 'Parent Record')
    partner_id = fields.Many2one('res.partner', 'Partner')
...