Обновить модели с другой модели odoo

Я хочу обновить модель другой моделью

например, когда я выбираю сотрудника, я хочу обновить его координаты после того, как состояния выполнены

    class Hr_transf_employee(models.Model):
        _name = 'hr.employee.transfer'
        _rec_name = 'employee_id'



        date_cration = fields.Date(string='Date order', required=True, default=datetime.today())
        date_transfer = fields.Date(string='Date transfer')
        employee_id = fields.Many2one('hr.employee',string='Employee', required=True) 

        job_id_new = fields.Many2one('hr.job',string='Job title', required=True) 
        country_work_id_new = fields.Many2one('res.country', 'Country work new') 

        state = fields.Selection([
            ('draft', 'Draft'),
            ('accept', 'Accept'),
            ('done', 'Done'),
            ('cancel', 'Cancel'),
        ], string='Order Status', readonly=True, copy=False, store=True, default='draft')

Хочу обновить job_id по job_id_new и страна от country_work_id_new в модели hr.employee

0
0
597
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Первый вариант: вы можете переопределить метод 'write' в hr.employee.transfert и обновить поля employee_id

@api.multi
def write(self, vals):
    res = super(Hr_transf_employee, self).write(vals)

    if vals.get('state', False) == 'done':  # Only update employee if the transferts become 'done'.
        for transfert in self:
            transfert.employee_id.job_id = transfert.job_id_new
            transfert.employee_id.country = transfert.country_work_id_new
    return res

Второй вариант:
вы можете добавить два вычисляемых поля в модель res.partner (вы можете использовать один и тот же метод для обоих полей).

@api.multi
def my_compute_method(self):
    for employee in self:
        employee_transfert_id = self.env['hr.employee.transfer'].search([
            ('employee_id', '=', employee.id),
            ('state', '=', 'done'),
        ], order="write_date DESC", limit=1)  # Get the last done transfert

        employee.job_id = employee_transfert_id and employee_transfert_id.job_id_new or False
        employee.country = employee_transfert_id and employee_transfert_id.country_work_id_new or False

Спасибо @Bouh, я пробую сначала, это хорошо работает ___ поэтому, если у меня есть поле даты, и я хочу применить функцию, которая if today = <'date creation', как это сделать

developer 10.09.2018 15:47

@developper Если это сработает, примите ответ

khelili miliana 10.09.2018 16:00

Хорошо. У вас есть идея, есть ли дата => сегодня?

developer 10.09.2018 16:25

Вы можете использовать fields.datetime.now (), чтобы получить текущее время и отфильтровать себя как <pre> date_now = fields.datetime.now () для передачи в self.filtered (lambda x, date_now = date_now: x.your_date_field = > date_now): ... </pre>

Bouh 11.09.2018 12:31
Ответ принят как подходящий

Отредактируйте готовую функцию wkf, чтобы она выглядела так:

@api.multi
def done(self):
    self.state = 'done'
    if self.job_id_new :
       self.job_id = self.job_id_new.id
    if self.country_work_id_new :
       self.country = self.country_work_id_new.id

Чтобы получить сегодня:

if  self.date_transfer <= self.create_date : 
    self.date_transfer = fields.datetime.now()

Это тоже работает ____ поэтому, если у меня есть поле даты, и я хочу применить функцию, если date_transfer = <'date creation', как это сделать

developer 10.09.2018 17:45

спасибо @khelili miliana ___ Извините, я не объяснил свой вопрос хорошо, я хотел сказать (если self.date_transfer <= self.create_date) был заменен на состояние 'done'; я имею в виду прежде всего >>>> [stackoverflow.com/questions/52261821/…

developer 11.09.2018 15:32

Другие вопросы по теме