Code Snippet Reference
This section provides a comprehensive reference to all available code snippets for Odoo development. From defining models in Python to creating views in XML, these snippets are designed to help you write code efficiently and consistently. Ideal for both beginners and experienced developers, this guide serves as a complete resource for everyday development tasks.

Python Snippets
🔧 Model Definition
• odoo new model class
: Create a new Odoo model class
from odoo import fields,models
class ModelName(models.Model):
_name = 'model.name'
_description = 'Model Description'
name = fields.Char(string='Name', required=True)
• odoo classical inherited model class
: Create classical inheritance
from odoo import fields,models
class ModelName(models.Model):
_name = 'model.name'
_inherit = 'model.to.inherit'
_description = 'Model Description'
new_field = fields.Char(string='New Field')
• odoo delegated inherited model class
: Create delegation inheritance
from odoo import fields, models
class ModelName(models.Model):
_name = 'model.name'
_inherits = {'parent.model': 'parent_id'}
_description = 'Model Description'
parent_id = fields.Many2one('parent.model', required=True, ondelete="cascade")
• odoo extended inherited model class
: Extend an existing model
from odoo import fields, models, api
class ModelName(models.Model):
_inherit = 'model.to.extend'
@api.model
def create(self, vals):
# Custom logic before creation
res = super().create(vals)
# Custom logic after creation
return res
🔧 Fields
• odoo boolean field
: Create Boolean field
fields.Boolean(string="Name", help="Help text", default=False, tracking=True)
• odoo binary field
: Create Binary field
fields.Binary(string="Name", help="Help text", attachment=True, max_size=10)
• odoo char field
: Create Char field
fields.Char(string="Name", help="Help text", required=False, tracking=True, translate=True)
• odoo integer field
: Create Integer field
fields.Integer(string="Name", help="Help text", default=0, tracking=True)
• odoo image field
: Create Image field
fields.Image(string="Name", help="Help text", max_width=1024, max_height=1024)
• odoo float field
: Create Float field
fields.Float(string="Name", help="Help text", digits=(16, 2), tracking=True)
• odoo text field
: Create Text field
fields.Text(string="Name", help="Help text", translate=True)
• odoo html field
: Create HTML field
fields.Html(string="Name", help="Help text", sanitize=True, translate=True)
• odoo date field
: Create Date field
fields.Date(string="Name", help="Help text", tracking=True)
• odoo datetime field
: Create Datetime field
fields.Datetime(string="Name", help="Help text", tracking=True)
• odoo selection field
: Create Selection field
fields.Selection([
('draft', 'Draft'),
('confirmed', 'Confirmed'),
('done', 'Done')
],
string="Status",
default='draft',
tracking=True,
help="Help text")
• odoo many2one field
: Create Many2one field
fields.Many2one('model.name', string="Name", help="Help text", tracking=True, ondelete='cascade', check_company=True)
• odoo many2many field
: Create Many2many field
fields.Many2many('model.name', string="Name", help="Help text", tracking=True, check_company=True)
• odoo one2many field
: Create One2many field
fields.One2many('model.name', 'connection_field', string="Name", help="Help text", tracking=True)
• odoo monetary field
: Create Monetary field
fields.Monetary(string="Name", help="Help text", currency_field="currency_id", tracking=True)
• odoo reference field
: Create Reference field
fields.Reference(string="Name", selection=[('model1', 'Model 1'), ('model2', 'Model 2')], help="Help text")
• odoo json field
: Create JSON field
fields.Json(string="Name", help="Help text")
🔧 Methods
• odoo create method
: Create method
@api.model_create_multi
def create(self, vals_list):
# Pre-create logic (optional)
records = super().create(vals_list)
# Post-create logic (optional)
return records
• odoo write method
: Write method
def write(self, values):
# Pre-write logic (optional)
res = super().write(values)
# Post-write logic (optional)
return res
• odoo unlink method
: Unlink method
def unlink(self):
# Pre-unlink logic (optional)
res = super().unlink()
# Post-unlink logic (optional)
return res
• odoo onchange method
: Onchange method
@api.onchange('field_name')
def _onchange_field_name(self):
if self.field_name:
self.target_field = value
• odoo compute method
: Compute method
field_name = fields.FieldType(string='Field Label', compute='_compute_field_name', store=True)
@api.depends('dependency_field')
def _compute_field_name(self):
for rec in self:
# Compute logic
rec.field_name = value
• odoo constraints method
: Constraints method
@api.constrains('field_name')
def _check_field_name(self):
for rec in self:
if not rec.field_name:
raise ValidationError("field_name must be set")
• odoo search method
: Search method
@api.model
def _search_name(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
args = args or []
domain = []
if name:
domain = ['|', '|',
('name', operator, name),
('field_name', operator, name),
('field_name', operator, name)]
return self._search(domain + args, limit=limit, access_rights_uid=name_get_uid)
• odoo default get method
: Default get method
@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
res.update({
'field_name': default_value,
})
return res
• odoo action method
: Action method
def action_action_name(self):
self.ensure_one()
return {
'name': _('Action Title'),
'type': 'ir.actions.act_window',
'res_model': 'model.name',
'view_mode': 'list,form',
'domain': [('field', '=', self.field)],
'context': {'default_field': self.field},
}
🔧 Error Handling
• odoo validation error
: Validation Error
raise ValidationError("Validation error message")
• odoo missing error
: Missing Error
raise MissingError("Missing error message")
• odoo access error
: Access Error
raise AccessError("Access error message")
• odoo user error
: User Error
raise UserError("User error message")
• odoo redirect warning
: Redirect Warning
raise RedirectWarning("Warning message", action_id, "Button Label")
🔧 Notifications
• odoo info notification
: Info Notification
return self.env.user.notify_info("Info message", sticky=True)
• odoo success notification
: Success Notification
return self.env.user.notify_success("Success message", sticky=True)
• odoo warning notification
: Warning Notification
return self.env.user.notify_warning("Warning message", sticky=True)
• odoo rainbow man notification
: Rainbow Man Notification
self.env.user.notify_success("Rainbow message", sticky=True, title="Success!", type="rainbow_man")
XML Snippets
🔧 Common Tags
• odoo xml
: Basic Odoo XML structure
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Enter your Odoo XML code here -->
</odoo>
• odoo record
: Record tag
<record id="record_id" model="model.name">
<field name="field_name">value</field>
<!-- Add more <field> tags here -->
</record>
🔧 Views
• odoo form view
: Form view
<record id="model_name_view_form" model="ir.ui.view">
<field name="name">model.name.view.form</field>
<field name="model">model.name</field>
<field name="arch" type="xml">
<form string="Form Title">
<sheet>
<group>
<field name="name"/>
<!-- Add your fields here -->
</group>
</sheet>
</form>
</field>
</record>
• odoo list view
: List view
<record id="model_name_view_list" model="ir.ui.view">
<field name="name">model.name.view.list</field>
<field name="model">model.name</field>
<field name="arch" type="xml">
<list string="List Title">
<field name="name"/>
<!-- Add your fields here -->
</list>
</field>
</record>
• odoo pivot view
: Pivot view
<record id="model_name_view_pivot" model="ir.ui.view">
<field name="name">model.name.view.pivot</field>
<field name="model">model.name</field>
<field name="arch" type="xml">
<pivot string="Pivot Title">
<field name="field_name"/>
<field name="field_name"/>
<field name="field_name"/>
</pivot>
</field>
</record>
• odoo calendar view
: Calendar view
<record id="model_name_view_calendar" model="ir.ui.view">
<field name="name">model.name.view.calendar</field>
<field name="model">model.name</field>
<field name="arch" type="xml">
<calendar string="Calendar Title" date_start="start_date_field" date_stop="end_date_field" mode="month">
<field name="name"/>
<!-- Add your fields here -->
</calendar>
</field>
</record>
• odoo graph view
: Graph view
<record id="model_name_view_graph" model="ir.ui.view">
<field name="name">model.name.view.graph</field>
<field name="model">model.name</field>
<field name="arch" type="xml">
<graph string="Graph Title" type="bar">
<field name="field_name" type="row"/>
<field name="field_name" type="measure"/>
</graph>
</field>
</record>
• odoo search view
: Search view
<record id="model_name_view_search" model="ir.ui.view">
<field name="name">model.name.view.search</field>
<field name="model">model.name</field>
<field name="arch" type="xml">
<search string="Search Title">
<field name="name"/>
<!-- Add your fields here -->
<filter string="Filter Name" name="filter_name" domain="[('field', '=', value)]"/>
<group expand="0" string="Group By">
<filter string="Group By Name" name="group_by_name" context="{'group_by': 'field'}"/>
</group>
</search>
</field>
</record>
• odoo kanban view
: Kanban view
<record id="model_name_view_kanban" model="ir.ui.view">
<field name="name">model.name.view.kanban</field>
<field name="model">model.name</field>
<field name="arch" type="xml">
<kanban string="Kanban Title" class="o_kanban_small_column">
<field name="name"/>
<!-- Add your fields here -->
<templates>
<t t-name="kanban-box">
<div class="oe_kanban_global_click">
<div class="oe_kanban_details">
<strong class="o_kanban_record_title">
<field name="name"/>
</strong>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
🔧 View Components
• odoo button box
: Button box
<div class="oe_button_box" name="button_box">
<!-- Add smart buttons here -->
</div>
• odoo smart button
: Smart button
<button name="action_view_records" type="object" class="oe_stat_button" icon="fa-list">
<field name="record_count" widget="statinfo" string="Records"/>
</button>
• odoo header
: Header with buttons and statusbar
<header>
<button name="action_confirm" string="Confirm" type="object" states="draft" class="btn-primary"/>
<button name="action_cancel" string="Cancel" type="object" states="confirmed"/>
<field name="state" widget="statusbar" statusbar_visible="draft,confirmed,done"/>
</header>
• odoo sheet
: Sheet with group and fields
<sheet>
<group>
<field name="field_name"/>
<!-- Add more fields here -->
</group>
</sheet>
• odoo notebook
: Notebook with pages
<notebook>
<page string="Page Title" name="page_name">
<!-- Add your page content here -->
</page>
</notebook>
• odoo chatter
: Chatter component
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
🔧 Actions and Menus
• odoo action
: Window action
<record id="action_model_name" model="ir.actions.act_window">
<field name="name">Action Name</field>
<field name="res_model">model.name</field>
<field name="view_mode">list,form</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create your first record!
</p>
</field>
</record>
• odoo menu root
: Root menu item
<menuitem id="menu_root_name"
name="Root Menu Name"
web_icon="module_name,static/description/icon.png"
sequence="10"/>
• odoo menu category
: Category menu item
<menuitem id="menu_category_name"
name="Category Name"
sequence="10"/>
• odoo menu action
: Action menu item
<menuitem id="menu_menu_name"
name="Menu Name"
action="action_name"
parent="parent_menu"
sequence="10"/>
🔧 Inheritance
• odoo view inherit
: View inheritance
<record id="model_name_view_view_type_inherit" model="ir.ui.view">
<field name="name">model.name.inherit.view_type</field>
<field name="model">model.name</field>
<field name="inherit_id" ref="module.view_id"/>
<field name="arch" type="xml">
<!-- Add your xpath modifications here -->
</field>
</record>
• odoo xpath
: XPath expression
<xpath expr="//field[@name='field_name']" position="after">
<!-- Add your content here -->
</xpath>
🔧 Field Attributes
• odoo field
: Basic field
<field name="field_name"/>
• odoo field widget
: Field with widget
<field name="field_name" widget="many2many_tags"/>
• odoo field invisible
: Invisible field
<field name="field_name" invisible="True"/>
• odoo field readonly
: Readonly field
<field name="field_name" readonly="True"/>
• odoo field required
: Required field
<field name="field_name" required="True"/>
• odoo field state
: State field
<field name="state" widget="statusbar" statusbar_visible="draft,confirmed,done"/>
• odoo options
: Field options
options="{'option_name': option_value}"
• odoo domain
: Field domain
domain="[('field_name', '=', value)]"
• odoo groups
: Groups restriction
groups="base.group_user"