You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ODOO 10技术问询:如何将hr员工模型记录迁移至自定义新模型

嘿,针对你在Odoo 10里的两个需求——把员工记录从一个模型迁移到另一个,以及从hr.employee提取记录直接创建自定义模型记录,我给你整理了具体的实现方案,你可以根据自己的实际场景调整:

方案1:批量迁移已有员工记录到自定义新模型

首先假设你的自定义新模型叫x_custom_employee,你需要先在模块里定义好这个模型的字段(比如姓名、邮箱、关联原员工等)。接下来可以写一个批量迁移的方法,一次性把所有已有员工记录同步过去:

from odoo import models, fields, api

class CustomEmployee(models.Model):
    _name = 'x_custom_employee'
    _description = '自定义员工记录'

    # 示例字段,根据你的实际需求修改
    name = fields.Char('员工姓名', required=True)
    original_employee_id = fields.Many2one('hr.employee', '原员工记录', readonly=True)
    work_email = fields.Char('工作邮箱')
    phone = fields.Char('联系电话')

    @api.model
    def batch_migrate_employees(self):
        """批量迁移hr.employee记录到自定义模型"""
        # 获取所有未迁移的原员工记录
        all_employees = self.env['hr.employee'].search([])
        # 先收集需要创建的记录数据,批量创建更高效
        new_records = []
        for emp in all_employees:
            # 检查是否已经迁移过,避免重复创建
            has_migrated = self.search([('original_employee_id', '=', emp.id)], limit=1)
            if not has_migrated:
                new_records.append({
                    'name': emp.name,
                    'original_employee_id': emp.id,
                    'work_email': emp.work_email,
                    'phone': emp.phone,
                    # 这里继续添加其他字段的映射关系
                })
        # 批量创建记录
        if new_records:
            self.create(new_records)
        return f"成功迁移 {len(new_records)} 条员工记录"

怎么执行这个方法?

  1. 开启Odoo的开发者模式
  2. 找到你的x_custom_employee模型,进入模型的技术视图
  3. 点击顶部的「执行方法」按钮,输入方法名batch_migrate_employees,确认执行即可

方案2:实时同步hr.employee记录到自定义模型

如果需要在新增或修改hr.employee记录时,自动在自定义模型里创建/更新对应记录,可以通过继承hr.employee模型来实现:

from odoo import models, api

class HrEmployeeInherit(models.Model):
    _inherit = 'hr.employee'

    @api.model
    def create(self, vals):
        # 先创建原员工记录
        new_emp = super(HrEmployeeInherit, self).create(vals)
        # 同步到自定义模型
        self.env['x_custom_employee'].create({
            'name': new_emp.name,
            'original_employee_id': new_emp.id,
            'work_email': new_emp.work_email,
            'phone': new_emp.phone,
            # 字段映射按需调整
        })
        return new_emp

    def write(self, vals):
        # 先更新原员工记录
        result = super(HrEmployeeInherit, self).write(vals)
        # 找到对应的自定义记录并更新
        custom_emp = self.env['x_custom_employee'].search([('original_employee_id', '=', self.id)], limit=1)
        if custom_emp:
            update_data = {}
            # 只更新有变化的字段
            if 'name' in vals:
                update_data['name'] = vals['name']
            if 'work_email' in vals:
                update_data['work_email'] = vals['work_email']
            if 'phone' in vals:
                update_data['phone'] = vals['phone']
            # 其他字段同理添加
            if update_data:
                custom_emp.write(update_data)
        return result

注意事项

  • 记得在你的模块__manifest__.py里添加依赖'hr',确保模块加载顺序正确
  • 字段映射一定要和你自定义模型的字段名对应,别写错了
  • 如果是批量迁移大量数据,优先用方案1的批量创建方式,比循环单条创建性能好很多
  • 操作前先在测试环境验证,避免影响生产数据

内容的提问来源于stack exchange,提问作者Prashanth K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:28:28