Odoo: Restore admin password

Hello guys ^^

Today’s article will show you how to restore your admin password in case you forget it.

To do so:

1-  Open your Pycharm IDE and open the “python console”:

-Execute the following code that will generate the encrypted password:

>>> from passlib.context import CryptContext

>>>print CryptContext ([‘pbkdf2_sha512’]).encrypt(‘Your password’)


NB: “your password” is the new password for your admin

2- Open your pgAdmin III:

Go to the table:”res_users” and then change your existing encrypted password with the new one generated by the code above.


3- Go now and log in with your new password

Please find here the Demo :

Best of luck ^^





Basics of Odoo architecture

Hello everyone ^^

Today’s article will provide you a basic overview of the Odoo architecture.

Setting up and managing an Odoo installation will require a basic understanding of the components that make up Odoo. So let’s start ^^

MVC architecture:

Odoo is built upon a Model-View-Controller (MVC) architecture. One of the primary goals of this architecture is to separate the visual display of the information from the business rules and management of the underlying data. For example, if you need to change the way data is organized in the model, it is desirable not to have to make dramatic changes to how you view the data. This is true for maintaining flexibility in viewing data. Today, it is common to have many different client applications sharing the same underlying data.

MVC model and Odoo


The Model notifies the Controller of any data changes, and in turn, the Controller updates the data in the Views.

The View can then notify the Controller of actions the user performed and the Controller will either update the Model if necessary or retrieve any requested data.

Technical architecture: 

Odoo system is formed from three main components:

  • PostgreSQL  database server: which contains all of the databases, each of which contains all data and most elements of the Odoo system configuration.
  • Odoo application server: which contains all the enterprise logic and ensures that Odoo runs optimally.One layer of the server is dedicated to communicate and interface with the PostgreSQL database, the ORM engine. Another layer allows communications between the server and a web browser, the Web layer.
  • Web client: Which provides user interface, it is running in a web browser as Javascript application. The client issues a request to the server, gets data back and display the result (e.g. a list of customers) in different ways (as forms, lists, calendars, …). Upon user actions, it sends queries to modify data to the server.

Odoo architecture



For any enterprise, the value of Odoo lies in its different modules. The role of the modules is to implement any business requirement. The server is the only necessary component to add modules.

A module is usually composed of data models, together with some initial data, views definitions (i.e. how data from specific data models should be displayed to the user), wizards (specialized screens to help the user for specific interactions), workflows definitions, and reports.

NB: An article will be soon published explaining the principal components of a module

Best of luck ^^


Field of type Reference in Odoo, how to use it ?

Reference field type in Odoo

The main use of this field type is to make a reference with a specific model and then a specific recordset of this model.

By using the reference field type, the first thing you will choose is the model:

field reference

And by choosing the model you will be asked the choose one of the recordset of the chosen Model

field reference recordset

Structure of the reference field in Odoo (New API)

A field of type reference is declared as below :

ref = fields.Reference(string='Reference', selection='_get_document_types')

Selection attribute : We define the method that will determine which models will be showed, and from which we can choose

In our example we used this method :

method selection field reference

    def _get_document_types(self):
        records = self.env['ir.model'].search(['|', ('model', '=', 'sale.order'), '|', ('model', '=', 'account.invoice'), '|', ('model', '=', 'stock.picking'), ('model', '=', 'purchase.order')])
        return [(record.model, record.name) for record in records] + [('', '')]

In this example, we specified that we want to choose from [ Sale Order, Account Invoice, Stock Picking, Purchase Order ] models

Hope it was useful for you
Good luck !!

Odoo : SQL Query Tips

In this article we will show some useful tips that will help you work with SQL Queries in python/Odoo.

How to execute queries in Odoo 10 ?

you should use the self.env.cr to run a sql query

cr = self.env.cr
cr.execute("SELECT a, b, c FROM [your_table] WHERE [condition]")

It’s highly recommended to use the double quotes ” ” instead of single quotes ‘ ‘

What’s the query can returns ?

cr.dictfetchall() : will give you all the matching records in the form of the list of dictionary containing key, value [{'': ''}, {'': ''}, ...].
cr.dictfetchone : works same as cr.dictfetchall() except it returns only a single record {'': ''}.
cr.fetchall() : will give you all the matching records in the form of the list of tuple [(''), (''), ...].
cr.fetchone() : works same way as cr.fetchall() except it returns only single record ('').

SQL Queries with variables

You can execute Queries with variables using %s like:

cr.execute("SELECT a, b, c FROM [your_table] AS a WHERE a.id = %s AND a.field = %s", (first_value, second_value))

Hope it was useful for you
Good luck !!

List Vs Tuple in python with Odoo

Hello everyone

In this article we will emphasize the difference in the use of tuple and list :

list gives you values between brackets “[]”. For example, when we do in odoo:

account_ids = self.env['account.account'].search([])
account_ids ---> [1, 4, 5, 8 , 9]

account_ids is a list of values

We can use this list:

* in loops:

for account_id in account_ids:
     move = self.env['account.account'].search([('account_id', '=', account_id)])

* to search in another table:

move = self.env['account.account'].search([('account_id', 'in', account_ids)])

* to change or search a specific value:

account_ids[2] -----> 5
account_ids[4] -----> 9
account_ids[0] = 10 -----> will replace the first value "1" by "10"

* change a tuple to a list:


tuple gives you values between parentheses “()”. we can use them in :

* change a tuple to a list:

account_ids = tuple(self.env['account.account'].search([])) 
account_ids ---> (1, 4, 5, 8 , 9)

* in loops:

for account_id in account_ids:
     move = self.env['account.account'].search([('account_id', '=', account_id)])

* to search in another table:

move = self.env['account.account'].search([('account_id', 'in', account_ids)])

* in SQL filter Query:

In SQL Query we should use a tuple of values and not a list

account_ids = tuple(self.env['account.account'].search([]))
cr.execute('SELECT * FROM account_move_line where account_id in %s,(account_ids))

what is Odoo ?

Hello everyone

Today’s article will be about “what is Odoo ?”, so you’ll get the chance to discover Odoo: its definition and its release history.

Overview about Odoo:

Odoo, formerly known as OpenERP, is a suite of enterprise management applications. Targeting companies of all sizes.

The application suite cover all the company’s needs:  CRM, eCommerce, accounting, inventory, point of sale, project management, etc.

It is 100 % modular application, so when Odoo is first installed there are ZERO modules installed with it, so you are able to only install the modules you need.

Odoo includes the following modules that may be installed with a simple mouse click:

– Accounting
– Customer Relationship Management (CRM)
– Warehouse Management
– Manufacturing Resource Planning (MRP)
– Purchase Management
– Project/Service Management
– Human Resource Management (HRM)
– Content Management (CMS)
– Document Management
– Fleet Management
– Point of Sale (POS)
– Application Builder


  • Odoo offers a simple and rapid solution for all users, it allows you to customize or modify your modules.
  • Odoo is writing in Python, JavaScript and XML.
  • Odoo is compatible with: Linux, Unix-Like, OS X and Windows

Release history:


NB: Odoo have released software as open source but starting at the V9.0 release, the company of Odoo has transitioned to an open core model which provides subscription-based proprietary Enterprise software and cloud-hosted Software as a service, and a cut-down community version.

Software license:

  • GNU General Public License (GNU GPL):  is a widely used free software license, which guarantees end users the freedom to run, study, share and modify the software.
  • GNU Affero General Public License ( GNU AGPL): is a free, copyleft license published by the Free Software Foundation in November 2007, and based on the GNU General Public License, version 3 and the Affero General Public License.

The Free Software Foundation has recommended that the GNU AGPLv3 be considered for any software that will commonly be run over a network.

  • GNU Lesser General Public License (GNU LGPL): is a free software license published by the Free Software Foundation (FSF). The license allows developers and companies to use and integrate software released under the LGPL into their own (even proprietary) software without being required by the terms of a strong copyleft license to release the source code of their own components.