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))

Debug Odoo 10.0 using Pycharm in Windows

Hello everyone
This article well help you step by step to debug odoo-10.0 in Windows using PycharmProjects.

For the environment, I am using Windows 7 and Pycharm, version 2016.3 in 64 bit

This article is divided into three parts:
Part 1: describes how to install required packages and source code
Part 2: show how to configure PostgresSQL and Odoo
Part 3: gives you the solution of some errors occurred while my installation process


I.Install required packages and source code:

1.1-Install Pycharm:


1.2-Install Python 2.7:


1.3-Install odoo 10:

First, go to:


to download the field “odoo-10.zip”, after that extract the content of “odoo-10.zip”.

1.4- Run Pycharm, and open the odoo-10 ( folder extracted earlier )



1.5-Install Microsoft Visual C++ Compiler for Python 2.7 if you don’t have one:


1.6-Install required packages:

For this step you could either:

Install the requirements.txt once you open PycharmProjects, it will appear a message asking you to install “requirements.txt

Go to “cmd” command line and execute these commands:

> cd C:\ python27 (here you specify the location of your field “python27”)
> python -m pip install -r C:\Users\PycharmProjects\Odoo-10.0\requirements.txt  (here you specify the location of your field “Odoo-10.0”)

NB: some of this required packages will not be installed, to do so I ask you to refer to the part 3 of this article.

1.7-Install pywin32 (This installation is optional) :

While installing the required packages missing, you may have some errors dealing with pywin32. So all you need to do is to install it:

link to the pywin32.exe

1.8-Install pip:

-Go to:


download get-pip.py

-Go to “cmd” command line and execute these commands:

> cd C:\python27(here you specify the location of your folder “python27”)
> Python get-pip.py

II.Install PostgreSQL and configure Odoo:

2.1- install and download PostgresSQL for Windows:

Download PostgreSQL from official website

NB : You should remember the password of “postgres” role that you set when installing PostgreSQL.you will need it in the next step.

2.2- Create a new role with superuser privilege for Odoo application:

In my case, I create a superuser “lenovo” and set its password as “lenovo”.
To do so, Go to “cmd” command line and execute these commands:

> cd "C:\Program Files\PostgreSQL\9.4\bin"
> createuser.exe --createdb --username postgres --no-createrole --pwprompt lenovo

2.3- configure Odoo:

To configure Odoo, you can refer to the file odoo-server.conf:

This is the password that allows database operations:

; admin_passwd = admin
db_host = localhost
db_port = 5432
db_user = lenovo
db_password =lenovo
addons_path = C:\Users\PycharmProjects\odoo10\addons

If you want to change your port, you can add this line to that file: xmlrpc_port = 8070

III.Errors and solutions:

3.1-You may have an error telling that you don’t have “Setuptools”, so you can install it.

To do so, go to “cmd” command line and execute these commands:

> cd C:\python27
> python -m pip install --upgrade setuptools

3.2- Install wheel & lxml-3.6.4-cp27-cp27m-win32.whl:

Go to “cmd” command line and execute these commands:

> cd C:\python27
> python -m pip install wheel

To install lxml-3.6.4-cp27-cp27m-win32.whl, go here

Then, go to “cmd” command line and execute this commands:

> cd C:\python27
> python -m pip install lxml-3.6.4-cp27-cp27m-win32.wh

(here you should choose the file that go with your environment)

3.3- Install ebaysdk:

Go to:

(here you should choose the file that go with your environment)

Then, go to “cmd” command line and execute these commands:

> cd C:\python27
> python -m pip install "C:\path to\tar\ofxparse-0.15.tar.gz "

3.4- Install psycopg2 .exe:


3.5- once you launch your odoo server using your navigator: localhost: 8069, you may have this error: « could not execute command lessc »

to resolve that problem, you follow those steps:

  • – Install nodejs : https://nodejs.org/en/
  • – go to “cmd” command line and execute this commands:
> cd C:\Program Files\nodejs (here you specify the location of your field “nosejs”) 
> npm install -g less less-plugin-clean-css

3.6- how to use wkhtmltopdf to print a PDF:

  • -Install wkhtmltopdf : http://wkhtmltopdf.org/downloads.html  (Windows (MSVC 2013))
  • -In system variable on windows add in PATH: C:\Program Files\wkhtmltopdf\bin
  • -Restart the OS(systeme windows)