■ Python pour Odoo
Les bases essentielles pour créer des modules Odoo
■■■ Niveau Débutant ■ 4 Concepts Clés ■ Orienté Odoo 18
Ce cours a été conçu spécifiquement pour apprendre Odoo 18 Community Edition. Tu y
trouveras les 4 concepts Python indispensables pour créer tes propres modules, avec des
exemples directement liés à Odoo.
1 Les Variables
Qu'est-ce qu'une variable ?
Une variable est une boîte qui contient une valeur. Tu lui donnes un nom et tu peux y stocker du
texte, des nombres, ou d'autres types de données.
# Déclarer des variables
nom = "Jean" # texte (string)
age = 25 # nombre entier (integer)
prix = 99.99 # nombre décimal (float)
actif = True # booléen (True ou False)
# Afficher une variable
print(nom) # affiche : Jean
print(age) # affiche : 25
# Combiner des variables
print("Bonjour, je m'appelle " + nom)
# affiche : Bonjour, je m'appelle Jean
■ En Python, le texte s'écrit toujours entre guillemets " " ou ' '. Les nombres s'écrivent sans
guillemets.
Lien avec Odoo
Dans Odoo, les variables sont utilisées partout. Par exemple quand tu récupères le nom d'un
client ou le montant d'une facture :
# Exemple dans un module Odoo
nom_client = [Link] # nom du client
montant = record.amount_total # montant de la facture
print("Facture de " + nom_client + " : " + str(montant) + " FCFA")
2 Les Fonctions
Qu'est-ce qu'une fonction ?
Une fonction est un bloc de code qu'on peut réutiliser. Au lieu de répéter le même code plusieurs
fois, on le met dans une fonction et on l'appelle quand on en a besoin.
# Définir une fonction
def bonjour(nom):
print("Bonjour, je m'appelle " + nom)
# Appeler la fonction
bonjour("Jean") # affiche : Bonjour, je m'appelle Jean
bonjour("Alice") # affiche : Bonjour, je m'appelle Alice
bonjour("devMaster") # affiche : Bonjour, je m'appelle devMaster
Fonction avec retour de valeur
Une fonction peut aussi retourner une valeur avec le mot clé return :
def calculer_total(prix, quantite):
total = prix * quantite
return total
# Utiliser la valeur retournée
result = calculer_total(1500, 3)
print(result) # affiche : 4500
■ def = 'define' en anglais. C'est le mot clé pour définir une fonction en Python.
Lien avec Odoo
Dans Odoo, les fonctions sont appelées des méthodes. Elles permettent de définir des actions
sur tes données :
# Méthode dans un module Odoo
def action_valider(self):
[Link] = 'valide'
self.date_validation = [Link]()
return True
3 Les Classes
Qu'est-ce qu'une classe ?
Une classe est un modèle pour créer des objets. Par exemple, si tu veux gérer des stagiaires, tu
crées une classe Stagiaire qui définit ce qu'est un stagiaire (son nom, son email, etc.) et ce qu'il
peut faire.
class Stagiaire:
def __init__(self, nom, email):
[Link] = nom
[Link] = email
def se_presenter(self):
print("Je m'appelle " + [Link])
print("Mon email : " + [Link])
# Créer des objets à partir de la classe
s1 = Stagiaire("devMaster", "dev@[Link]")
s2 = Stagiaire("Alice", "alice@[Link]")
# Accéder aux attributs
print([Link]) # affiche : devMaster
print([Link]) # affiche : alice@[Link]
# Appeler une méthode
s1.se_presenter()
Comprendre __init__ et self
Terme Rôle Équivalent
__init__ Constructeur, s'exécute à la création constructor()
self Référence à l'objet lui-même this
■■ self doit toujours être le premier paramètre de chaque méthode dans une classe Python !
Lien avec Odoo
Dans Odoo, chaque modèle (table de base de données) est une classe Python. Quand tu crées
un module, tu crées des classes qui deviennent automatiquement des tables dans PostgreSQL !
# Classe Python → Table PostgreSQL dans Odoo
from odoo import models, fields
class Stagiaire([Link]):
_name = '[Link]' # nom de la table
_description = 'Stagiaire'
name = [Link](string='Nom') # colonne 'name'
email = [Link](string='Email') # colonne 'email'
age = [Link](string='Age') # colonne 'age'
4 L'Héritage
Qu'est-ce que l'héritage ?
L'héritage permet de créer une nouvelle classe qui récupère automatiquement tout ce qu'une
autre classe a déjà. On évite ainsi de réécrire du code.
# Classe parent
class Stagiaire:
def __init__(self, nom, email):
[Link] = nom
[Link] = email
def se_presenter(self):
print("Je m'appelle " + [Link])
# Classe enfant qui hérite de Stagiaire
class Formateur(Stagiaire): # Formateur hérite de Stagiaire
def __init__(self, nom, email, specialite):
super().__init__(nom, email) # récupère nom et email
[Link] = specialite # ajoute specialite
def enseigner(self):
print("J'enseigne " + [Link])
# Formateur a tout de Stagiaire + sa propre spécialité
f = Formateur("Claude", "claude@[Link]", "Odoo")
f.se_presenter() # hérité de Stagiaire → Je m'appelle Claude
[Link]() # propre à Formateur → J'enseigne Odoo
print([Link]) # hérité → claude@[Link]
■ super().__init__() appelle le constructeur de la classe parent. C'est comme dire 'fais d'abord ce
que fait Stagiaire, puis ajoute le reste'.
Lien avec Odoo — L'héritage de modèles
C'est LE concept le plus puissant d'Odoo. Tu peux hériter d'un module existant pour ajouter des
champs ou modifier son comportement, sans toucher à son code original !
# Hériter du modèle [Link] (contacts Odoo)
# pour ajouter un champ 'code client'
from odoo import models, fields
class ResPartner([Link]):
_inherit = '[Link]' # on hérite du modèle existant
code_client = [Link](string='Code Client')
# Odoo ajoute automatiquement cette colonne à la table !
■■ Dans Odoo on utilise _inherit pour hériter d'un modèle existant, et _name pour créer un
nouveau modèle.
Récapitulatif
Concept En Python Dans Odoo
Variable nom = "Jean" Valeur d'un champ
Fonction def bonjour(nom): Méthode / Action
Classe class Stagiaire: Modèle / Table BDD
class
Héritage Formateur(Stagiaire): _inherit = '[Link]'
■ Prochaine étape
Tu as maintenant toutes les bases Python nécessaires pour créer ton premier module Odoo ! La
prochaine étape c'est de créer le module ecole avec un modèle Stagiaire qui apparaîtra
directement dans l'interface Odoo et créera une table dans PostgreSQL.
# Structure de ton futur module
addons/
■■■ ecole/
■■■ __init__.py
■■■ __manifest__.py
■■■ models/
■■■ __init__.py
■■■ [Link] ← ta classe Stagiaire ici !
Formation Odoo 18 Community • Python pour débutants • devMaster 2026