Odoo 18, like its earlier versions, offers a highly modular and flexible framework for customization. One of the most common and powerful customizations you can make is inheriting an existing model and adding a new menu to it.
This guide walks you through the process using the sale.order model as an example.
Whether you want to streamline workflows or create shortcuts for frequently used features, this approach ensures your customizations remain upgrade-friendly and clean.
Step 1: Create a Custom Module
Before implementing any customizations, it is essential to work within your own module to ensure maintainability and ease of upgrades.
Step 2: Add a Menu Item for the Model
Create a file named views/sale_order_menu.xml in your custom module. This XML file will define the new menu and its associated action.
In the XML, we need a <menuitem> tag to define the ID and name of the new menu. But before that, we need the XML ID of the parent menu (Sales). To find the appropriate parent, we can either search for it in the addons or identify it through the Odoo settings.
Go to General Settings > Technical > User Interface > Menu Items. Then search for Sales and locate the Sales menu item. Inside the metadata, you can find the XML ID, which can be used as the parent to add a new menu under the Sales module.

This can be specified as the parent in the <menuitem> tag in the XML file. If you want to implement any functionality for that menu, you can assign an action to it like this:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="create_order_action" model="ir.actions.act_window">
<field name="name">Create Order Menu</field>
<field name="res_model">sale.order</field>
<field name="view_mode">form</field>
<field name="target">new</field>
</record>
<menuitem id="create_order_menu" name="Create Order"
parent="sale.sale_menu_root" sequence="11" action="your_module_name.create_order_action"/>
</odoo>
Step 3: Load the XML File in Manifest
To make sure Odoo processes your new menu definition, you need to include the XML file in your module's manifest.
Edit the __manifest__.py file to include the view file like so:
{
'name': 'Odoo Demonstration',
'version': '18.0.1.0.0',
'description': """ How to inherit and add menu to existing model in odoo 18 """,
'depends': ['base','sale'],
'installable': True,
'data': [
'views/sale_order.xml',
],
"license": "LGPL-3",
"Application": False,
}
Step 4: Install and Test
After completing the development, install your custom module. Once the module is installed successfully, go to the Sales application in the Odoo backend. You should see a new menu item labeled Create Order under the Sales menu. Clicking it will open the form view for creating a new sales order in a pop-up.
By inheriting existing models and attaching new menus, you can offer powerful features that feel native to users. This setup is ideal for custom workflows, shortcuts, or streamlining operations and keeps your implementation clean and future-proof.
To read more about How to create a Menu, Pages, & Mega Menu in Odoo 17, refer to our blog How to Create Menu, Pages & Mega Menu in Odoo 17.