Odoo 17 показывает hr.employee с many2many из другой модели

Вопрос или проблема

Я хочу показать записи hr.employee с полями many2many из другой модели

Модель A

class RacingTeams (models.Model):
_name = "racing.teams"
_description = "Гоночные команды"
_rec_name="name"

name = fields.Char(string="Имя", tracking=True)
desc = fields.Char(string="Описание", tracking=True)
employee_ids = fields.Many2many(
    comodel_name="hr.employee",
    relation='hr_teams_rel',
    column1='racing_id',
    column2='employee_id',
    string='Сотрудник',
)

Модель B

class RacingTeamEmployee(models.Model):
_name="racing.team.employee"
_description = 'Сотрудник в команде с уровнем'

employee_id = fields.Many2many('hr.employee', string="Сотрудник")
team_id = fields.Many2one('racing.teams', string='Команда')
tier_id = fields.Selection([
    ('tier_1', 'Уровень 1'),
    ('tier_2', 'Уровень 2'),
    ('tier_3', 'Уровень 3'),
], string='Уровень', required=True)

Если я использую many2one employee_id в модели B, он может показывать записи hr.employee, но нужно добавлять их по одному. Я хочу добавить всех сотрудников в команды с помощью many2many, но это не показывает записи hr.employee

Ответ или решение

Как отобразить записи hr.employee с полем many2many из другой модели в Odoo 17

Для решения вашей задачи в Odoo 17, когда необходимо отобразить записи hr.employee с использованием поля Many2many из другой модели, можно следовать определенным шагам. В вашем случае, вы хотите создать связь между hr.employee и моделью racing.teams через модель racing.team.employee. Рассмотрим реализацию этого процесса шаг за шагом.

Шаг 1: Определение моделей

Вы уже правильно определили две модели: RacingTeams и RacingTeamEmployee. Однако, чтобы обеспечить связь Many2many с записью hr.employee, нам необходимо скорректировать обе модели.

Модель RacingTeams

Допустим, вы хотите, чтобы в модели RacingTeams была возможность добавлять несколько сотрудников. Ваша текущая реализация модели кажется правильной. Новая структура будет выглядеть так:

class RacingTeams(models.Model):
    _name = "racing.teams"
    _description = "Racing Teams"
    _rec_name = "name"

    name = fields.Char(string="Имя", tracking=True)
    desc = fields.Char(string="Описание", tracking=True)
    employee_ids = fields.Many2many(
        comodel_name="hr.employee",
        relation='hr_teams_rel',
        column1='racing_id',
        column2='employee_id',
        string='Сотрудники',
    )
Модель RacingTeamEmployee

Ваша модель RacingTeamEmployee использует поле Many2many для employee_id, что не является оптимальным для задачи добавления сотрудников по командам. Я бы рекомендовал сделать следующим образом:

class RacingTeamEmployee(models.Model):
    _name = "racing.team.employee"
    _description = "Employee in Team with Tier"

    employee_id = fields.Many2one('hr.employee', string="Сотрудник")
    team_id = fields.Many2one('racing.teams', string='Команда')
    tier_id = fields.Selection([
        ('tier_1', 'Тиер 1'),
        ('tier_2', 'Тиер 2'),
        ('tier_3', 'Тиер 3'),
    ], string='Тиер', required=True)

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

Шаг 2: Создание представлений

Чтобы отобразить сотрудников в пользовательском интерфейсе (UI), вам необходимо определить представления для этих моделей. Убедитесь, что представления корректно используют определенные поля.

Для RacingTeams:

<record id="view_racing_teams_form" model="ir.ui.view">
    <field name="name">racing.teams.form</field>
    <field name="model">racing.teams</field>
    <field name="arch" type="xml">
        <form>
            <header>
                <field name="name"/>
            </header>
            <sheet>
                <group>
                    <field name="desc"/>
                    <field name="employee_ids" widget="many2many_tags"/>
                </group>
            </sheet>
        </form>
    </field>
</record>

<record id="view_racing_teams_tree" model="ir.ui.view">
    <field name="name">racing.teams.tree</field>
    <field name="model">racing.teams</field>
    <field name="arch" type="xml">
        <tree>
            <field name="name"/>
            <field name="desc"/>
        </tree>
    </field>
</record>

Шаг 3: Проверка и тестирование

После выполнения всех вышеуказанных шагов, важно осуществить проверку и тестирование. Для этого:

  1. Проверьте настройки: Убедитесь, что у вас в системе есть несколько записей сотрудников hr.employee.
  2. Создание команд: Перейдите к созданию новых записей в модели RacingTeams и убедитесь, что вы можете выбирать сотрудников через интерфейс Many2many, который вы настроили.
  3. Отображение: Убедитесь, что в результате все добавленные сотрудники отображаются корректно в окне команды.

Заключение

Таким образом, вы сможете создать гибкую систему для управления командами и их сотрудниками в Odoo 17. Убедитесь, что следуете лучшим практикам разработки и тестирования, чтобы ваша система работала правильно. Рассмотренные выше шаги должны помочь вам в успешной реализации функции отображения записей hr.employee с использованием полей Many2many. Если у вас есть дополнительные вопросы, не стесняйтесь обращаться за помощью в сообщество Odoo.

Оцените материал
Добавить комментарий

Капча загружается...