Migration clean sample page - odoo-ps/psbe-process GitHub Wiki

This is a sample page, it's just representative.

Use only what it's needed for your migrations script (each upgrade is different).

import logging

# Add dependencies only if needed
from odoo.upgrade import util
from odoo import api, SUPERUSER_ID

_logger = logging.getLogger(__name__)

def migrate(cr, version):
    env = api.Environment(cr, SUPERUSER_ID, {})  # Declare only if needed

    _logger.info("###################################################################################")
    _logger.info("Begin migration script")

    _logger.info("---------- Rename xmlid on records ----------")
    util.rename_xmlid(cr, "module_name.xmlid", "my_module.representative_name")

    _logger.info("---------- Remove records ----------")
    util.remove_view(cr, "module_name.view_xmlid")
    util.remove_view(cr, view_id=view_id)
    util.remove_menus(cr, menus_id)
    util.remove_record(cr, "module_name.record_xmlid")

    _logger.info("---------- Rename / Remove models ----------")
    util.rename_model(cr, "old_model_name", "new_model_name")
    util.remove_model(cr, "model_name")

    _logger.info("---------- Rename / Remove fields ----------")
    util.rename_field(cr, "model_name", "old_field_name", "new_field_name")
    util.remove_field(cr, "model_name", "field_name")

    _logger.info("---------- Update data ----------")
    cr.execute("[UPDATE][DELETE][INSERT] SQL query")

    _logger.info("---------- Force update of a record ----------")
    util.update_record_from_xml(cr, "module_name.record_xmlid")

    _logger.info("---------- Recompute fields ----------")
    util.recompute_fields(cr, "model_name", ["field_name_1", "field_name_2", ...], logger=_logger)
   
    _logger.info("End migration script")
    _logger.info("###################################################################################")

For repetitive operations use loops:

    _logger.info("---------- Rename fields ----------")
    fields_to_rename = [
        ("model_1", "old_field_1", "new_field_1"),
        ("model_2", "old_field_2", "new_field_2"),
        ("model_3", "old_field_3", "new_field_3"),
        ...
    ]
    for model_name, old_name, new_name in fields_to_rename:
        util.rename_field(cr, model_name, old_name, new_name)
⚠️ **GitHub.com Fallback** ⚠️