Odoo 20.0 FINAL est publié et disponible sur l'App Store de Odoo. Si vous migrez une installation qui n'utilise que des modules de la propre Odoo, le risque est faible. Si elle comporte des connecteurs personnalisés, internes ou tiers, certains changements d'Odoo 20 cassent des modules entiers : et au moins un, jusqu'au 31 octobre, ne signalait aucune erreur. Voici l'ordre dans lequel nous vérifions, avec ce qui peut s'automatiser et ce qu'il faut regarder à la main.
1. Inventoriez les modules non officiels qui tournent dans votre Odoo
Depuis Paramètres > Apps, filtrez sur « pas dans le catalogue d'Odoo » ou interrogez ir.module.module avec author != 'Odoo S.A.'. Chacun de ces modules doit être vérifié avant de migrer ; ceux d'Odoo, c'est Odoo qui les porte.
2. Cherchez les dépendances vers des modules disparus
grep -rn "base_vat\|base_iban\|stock_picking_batch\|website_sale_wishlist\|website_sale_comparison" */__manifest__.py. S'ils apparaissent dans depends, le module devient installable=False sur Odoo 20 : ce n'est pas un avertissement, il ne s'installe pas. La validation du NIF/IBAN a été déplacée dans le noyau ; le reste n'a pas de remplaçant direct.
3. Cherchez odoo.osv dans le code Python
grep -rn 'from odoo.osv import' .. Le paquet odoo.osv n'existe plus dans Odoo 20 : il provoque ModuleNotFoundError et le module ne se charge pas. Remplacez chaque expression.AND/OR/TRUE_DOMAIN/FALSE_DOMAIN par son équivalent dans odoo.fields.Domain.
4. Convertissez les droits d'accès au nouveau format
ir.model.access et ir.rule fusionnent en un seul modèle, ir.access. Odoo fournit un script : odoo-bin upgrade_code --script 19.4-00-ir-access --addons-path <carpeta>, qui convertit les CSV, met à jour le manifeste et supprime l'ancien fichier. Attention aux fichiers ._* de macOS : ils font échouer le script avec UnicodeDecodeError ; supprimez-les d'abord avec find . -name '._*' -delete.
5. Vérifiez comment les pièces jointes sont écrites et lues
Mise à jour du 6 novembre 2026 : jusqu'au 31 octobre, c'était le changement le plus dangereux, car il ne prévenait pas : ir.attachment.create({'datas': ...}) créait la pièce jointe avec une taille de 0 et sans aucune erreur. Depuis le commit c06a07264bdb d'Odoo, il lève AssertionError. Remplacez 'datas': base64.b64encode(x) par 'raw': x : cela fonctionne de la même façon sur Odoo 17, 18, 19 et 20, donc on peut le corriger dès aujourd'hui sans attendre le portage. Lire avec .datas provoque AttributeError : dans Odoo 20, on lit avec .raw ou, après avoir lu le champ, avec .content/.to_base64() sur la valeur renvoyée.
6. Passez la version du manifeste à 20.0
Si le version du __manifest__.py ne commence pas par 20.0, le log indique The module X has an incompatible version, setting installable=False et le module reste uninstallable. Ce n'est pas un avertissement ignorable : sans cette étape, rien de ce qui précède n'a d'importance.
7. Installez sur un vrai Odoo 20, ne vous contentez pas de compiler
Que le code compile ou qu'une analyse statique ne signale rien ne prouve pas que le module s'installe, et encore moins qu'il fonctionne. Le seul test qui compte est une vraie installation sur un Odoo 20.0 FINAL avec Enterprise et l'exécution de toute la batterie de tests du module, pas seulement le démarrage.
8. Ne migrez pas tout le catalogue de connecteurs d'un coup
Classez-les selon ce qui brasse le plus d'argent ou ce qu'il est le plus risqué de laisser cassé, pas selon le plus facile à porter. Un connecteur de facturation ou de signature électronique qui échoue en silence (comme celui des pièces jointes jusqu'au 31 octobre) coûte bien plus cher à découvrir tard qu'un connecteur de catalogue.
Le détail de chaque rupture, avec le fichier et la ligne où nous l'avons vérifiée : Odoo 20 est là : ce qui change pour vos intégrations et connecteurs.
Questions fréquentes
Puis-je migrer vers Odoo 20 si j'ai des connecteurs personnalisés ?
Oui, mais chacun de vos connecteurs personnalisés doit être revu avant la migration : dépendances vers des modules disparus (base_vat, base_iban...), usage de odoo.osv, format des droits d'accès et façon d'écrire et de lire les pièces jointes. Installer sans erreur ne suffit pas ; il faut passer toute la batterie de tests sur un vrai Odoo 20.
Que peut-on corriger en premier sans attendre la migration ?
Changer la façon d'écrire les pièces jointes : 'datas': base64.b64encode(x) par 'raw': x. Cela fonctionne pareil sur Odoo 17, 18, 19 et 20, donc on peut le faire dès aujourd'hui dans le code actuel sans attendre la branche 20.
Liens utiles chez FlexigoTech
Ce que nous faisons à ce sujet
Vous voulez que nous passions en revue vos connecteurs avant de migrer ?
Nous vous disons, à partir du code réel d'Odoo 20, lesquels de vos modules personnalisés cassent et à quel point de cette liste. Écrivez à comercial@flexigobe.com ou appelez le +34 616 809 504.

