Фильтровать сотрудников по проектам в odoo 12

#python #odoo #odoo-12

#python #odoo #odoo-12

Вопрос:

Я настраиваю модуль проекта Odoo, в модуле у нас есть проекты, в которых задачи назначены сотрудникам, мне нужно иметь выпадающий список сотрудников на основе выбора проекта, но поскольку прямой связи нет, я должен искать все задачи, связанные с проектом, а затем искатьсотрудники.

пока это моя модель:

 class myModel(models.TransientModel):
    _name = "mymodule.mymodel"

    project_id = fields.Many2one('project.project', string="Project")
    task_id = fields.Many2one('project.task', string="Task", domain="[('project_id', '=', project_id)]")
    employee_id = fields.Many2one('hr.employee', string="Assign To")

    @api.onchange('project_id')
    def _projecy_onchange(self):
        if not self.project_id.id:
            return {'domain': {'employee_id': []}}
        
        tasks = self.env['project.task'].search([('project_id','=',self.project_id.id)])
                
        user_ids = []
        for t in tasks:
            if t.user_id:
              user_ids.append(t.user_id.id)
        
       
        if len(user_ids)>0:
            employees = self.env['hr.employee'].search(['user_id','in', user_ids])
            return {'domain': {'employee_id': employees}}
        else:
            return {'domain': {'employee_id': []}}
  

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

employees = self.env[‘hr.employee’].search([‘user_id’,’in’, user_ids])

Я получаю следующую ошибку:

токен elif [1] == ‘in’, а не токен [2]: ошибка индекса: индекс кортежа вне диапазона

когда я печатаю user_ids, это базовый список с идентификаторами, что-то вроде [9] (один элемент, облако для меня более очевидно)

Я понимаю, что поиск может работать как employees = self.env[‘hr.employee’].search([‘user_id’,’in’, [9])

любые рекомендации будут оценены

Комментарии:

1. employees = self.env['hr.employee'].search([('user_id','in', user_ids)]) сделайте это. — добавить кортеж внутри списка поиска.

Ответ №1:

У вас неправильный синтаксис метода поиска odoo, сделайте это так,

 employees = self.env['hr.employee'].search([('user_id','in', user_ids)])
  

В вашем синтаксисе отсутствует часть: круглые фигурные скобки вокруг вашего домена.

Комментарии:

1. спасибо, я не уловил этого, нужно было увидеть это свежим взглядом