Exploring the Power of Odoo ORM Methods: A Comprehensive Guide with Examples

In the world of business management and enterprise resource planning (ERP) systems, Odoo has established itself as a leading open-source platform. One of the key features that makes Odoo stand out is its Object-Relational Mapping (ORM) system. The Odoo ORM Methods enables developers to interact with the database without writing raw SQL queries, making development faster, more efficient, and less error-prone. In this blog, we will take a deep dive into some essential Odoo ORM methods, accompanied by small yet illustrative examples.

List Of Odoo ORM Methods

1. search() Method:

The search() method is used to retrieve a list of records from a model that satisfies certain conditions. It takes a domain as an argument, which is a list of conditions expressed in a format similar to a Python list of tuples. Let’s consider an example where we want to fetch all customers whose age is above 30:

customer_records = env['res.partner'].search([('age', '>', 30)])

2. browse() Method:

The browse() method is used to retrieve records by their database IDs. It returns a recordset containing the specified records. Here’s an example of how to retrieve a customer record with the ID 5:

customer_record = env['res.partner'].browse(5)

3. read() Method:

The read() method is used to fetch specific fields’ values from records in a model. It takes a list of field names as an argument and returns a list of dictionaries containing the specified fields’ values. Suppose we want to retrieve the names and ages of customers:

customer_data = env['res.partner'].search([]).read(['name', 'age'])

4. write() Method:

The write() method is used to update the values of fields in existing records. It takes a dictionary of field-value pairs as an argument. Consider an example where we want to update the email address of a customer with ID 10:

customer_to_update = env['res.partner'].browse(10)
customer_to_update.write({'email': '[email protected]'})

5. create() Method:

The create() method is used to create new records in a model. It takes a dictionary containing field-value pairs for the new record. Here’s an example of creating a new product:

new_product_data = {'name': 'New Product', 'price': 100}
new_product = env['product.product'].create(new_product_data)

6. unlink() Method:

The unlink() method is used to delete records from a model. It is called on a recordset and has no arguments. Let’s say we want to delete a customer record with ID 8:

customer_to_delete = env['res.partner'].browse(8)

7. count() Method:

The count() method is used to get the count of records that satisfy certain conditions. It takes a domain as an argument and returns the number of records that match the conditions. For instance, to count the number of active customers:

active_customer_count = env['res.partner'].search([('is_active', '=', True)]).count()

8. sorted() Method:

The sorted() method is used to retrieve records in a specific order. It takes a field name and an optional sorting order (‘asc’ for ascending, ‘desc’ for descending) as arguments. To get a list of products sorted by price in descending order:

sorted_products = env['product.product'].search([]).sorted('price', order='desc')

9. mapped() Method:

The mapped() method is used to apply a function to a field of a recordset and return the results as a dictionary. This is particularly useful when you want to transform data for reporting or analysis. For example, let’s create a dictionary of customer names and their corresponding ages:

customer_age_mapping = env['res.partner'].search([]).mapped('name', 'age')

10. Chaining Methods:

One of the powerful features of Odoo ORM is the ability to chain methods together. This allows for more complex operations in a concise manner. For example, let’s find the names of active customers older than 40:

selected_customers = env['res.partner'].search([('is_active', '=', True), ('age', '>', 40)])
customer_names = selected_customers.mapped('name')


In conclusion, Odoo ORM methods provide developers with a convenient and efficient way to interact with the database, reducing the complexity and potential errors associated with raw SQL queries. The examples provided above demonstrate the versatility of these Odoo ORM methods, enabling tasks ranging from data retrieval and modification to record creation and deletion. By mastering these Odoo ORM methods, developers can streamline their Odoo development process and create robust ERP solutions.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button