Вопрос или проблема
Я хочу показать записи 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: Проверка и тестирование
После выполнения всех вышеуказанных шагов, важно осуществить проверку и тестирование. Для этого:
- Проверьте настройки: Убедитесь, что у вас в системе есть несколько записей сотрудников
hr.employee
. - Создание команд: Перейдите к созданию новых записей в модели
RacingTeams
и убедитесь, что вы можете выбирать сотрудников через интерфейс Many2many, который вы настроили. - Отображение: Убедитесь, что в результате все добавленные сотрудники отображаются корректно в окне команды.
Заключение
Таким образом, вы сможете создать гибкую систему для управления командами и их сотрудниками в Odoo 17. Убедитесь, что следуете лучшим практикам разработки и тестирования, чтобы ваша система работала правильно. Рассмотренные выше шаги должны помочь вам в успешной реализации функции отображения записей hr.employee
с использованием полей Many2many. Если у вас есть дополнительные вопросы, не стесняйтесь обращаться за помощью в сообщество Odoo.