Introduction
Une erreur Odoo Many2One survient quand un champ relationnel pointant vers un autre modèle est mal configuré, rempli avec des données invalides ou reçoit une valeur inappropriée. Parce qu’un Many2one crée un lien direct entre enregistrements, toute rupture de ce lien peut casser les vues, les règles de validation ou des automatismes.
Ces problèmes se manifestent le plus souvent dans la couche UI lors de la création ou de la modification d’enregistrements, mais ils peuvent aussi apparaître pendant des imports ou des migrations de données.
Ce guide décrit les raisons courantes des erreurs Many2one et propose des étapes sûres et pratiques pour les corriger.
Qu’est-ce qu’un champ Many2one dans Odoo ?
Un champ Many2one établit une relation entre le modèle courant et un autre modèle dans Odoo.
Exemple concret :
partner_id = fields.Many2one(
'res.partner',
string="Customer",
required=True
)
Cela signifie en pratique :
- Chaque enregistrement référence un seul partenaire
- Plusieurs enregistrements peuvent pointer vers le même partenaire
Si cette référence est invalide ou mal définie, Odoo déclenche une erreur.
Causes fréquentes d’erreurs Many2one dans Odoo
1. Référence d’enregistrement invalide
Si le Many2one contient un identifiant qui n’existe plus, Odoo bloque l’opération.
Exemple concret :
- ID d’enregistrement supprimé
- ID erroné lors d’un import
- API transmettant une mauvaise référence
Ces cas provoquent souvent des messages du type « Record does not exist » ou des erreurs de validation.
2. Champ Many2one requis laissé vide
Quand le champ est déclaré comme :
required=True
Et que l’utilisateur laisse la valeur vide dans le formulaire, Odoo lève une erreur de validation.
3. Domaine (domain) empêchant la sélection
Les champs Many2one incluent souvent des filtres de domaine pour restreindre les choix :
partner_id = fields.Many2one(
'res.partner',
domain=[('customer_rank', '>', 0)]
)
Si aucun enregistrement ne respecte ce domaine, l’utilisateur ne pourra rien sélectionner, ce qui crée de l’incompréhension ou des blocages.
4. Droits d’accès insuffisants
Si l’utilisateur n’a pas le droit de lire le modèle lié, le champ Many2one peut ne pas se charger correctement.
Symptômes possibles :
- AccessError
- Liste déroulante vide
- Comportements étranges dans l’interface
5. Référence de modèle incorrecte
Si le Many2one pointe vers un modèle qui n’existe pas :
fields.Many2one('non.existing.model')
Odoo peut planter lors de l’installation du module.
6. Restrictions multi-sociétés
Si l’enregistrement lié appartient à une autre société, Odoo peut empêcher son accès ou sa sélection.
Ce scénario est fréquent dans des environnements multi-sociétés.
Comment corriger les erreurs Many2one dans Odoo
Étape 1 – Vérifier l’existence du modèle lié
Contrôlez que le nom du modèle dans :
fields.Many2one('res.partner')
est correct et que le module correspondant est bien installé.
Étape 2 – Confirmer que l’enregistrement existe
Si l’erreur indique un ID précis :
- Vérifiez si l’enregistrement a été supprimé
- Validez les valeurs lors d’un import
- Privilégiez les identifiants externes (external IDs) plutôt que les IDs bruts de la base
Étape 3 – Examiner les filtres de domaine
Supprimez temporairement ou simplifiez les domain pour voir s’ils bloquent la sélection de valeurs valides.
Étape 4 – Vérifier les droits d’accès
Assurez-vous que l’utilisateur dispose de :
- Droits de lecture sur le modèle lié
- Permissions de groupe appropriées
Testez avec un Administrateur pour isoler un problème de permission.
Étape 5 – Valider la configuration des champs requis
Si le champ est requis :
- Ajoutez-le clairement dans la vue formulaire
- Définissez une valeur par défaut si cela a du sens
Étape 6 – Tester le contexte multi-sociétés
Changez de société dans le contexte utilisateur pour vérifier si l’enregistrement devient visible.
Comment éviter les erreurs Many2one
- Évitez les IDs codés en dur
- Utilisez des external IDs dans les imports
- Documentez et simplifiez les domain filters
- Vérifiez que les modèles liés sont installés avant le déploiement
- Testez la logique relationnelle après toute mise à jour de module
Les relations Many2one sont au cœur du modèle de données Odoo. Une conception relationnelle soignée évite une grande partie des incidents liés à l’ORM.
Comment Dassolo garantit la cohérence relationnelle dans Odoo
Les erreurs Many2one sont souvent le symptôme de problèmes relationnels plus profonds plutôt que de simples configurations ratées. Dans des environnements Odoo complexes, elles proviennent généralement de références invalides, d’enregistrements parents supprimés, de filtres de domaine mal pensés ou d’imports mal ordonnés.
Chez Dasolo, nous traitons ces problèmes en cartographiant l’ensemble du flux relationnel entre les modèles. Nous constatons que les causes récurrentes sont :
- Références de clés étrangères incorrectes
- Ordre de création d’enregistrements inadapté lors d’intégrations
- Validation insuffisante avant l’affectation relationnelle
- Incohérences entre sociétés (multi-company)
- Modifications directes en base hors ORM
Pour préserver l’intégrité relationnelle, nous privilégions une modélisation propre, une gestion contrôlée du cycle de vie des enregistrements et l’usage strict de l’ORM. Une architecture relationnelle rigoureuse réduit fortement les erreurs Many2one en production.
Conclusion
L’« erreur Many2One » dans Odoo survient quand un champ relationnel pointe vers un enregistrement invalide, absent ou inaccessible. Bien que l’erreur soit visible dans l’interface ou les logs, sa cause réelle réside souvent dans l’intégrité des relations ou le flux des données.
En vérifiant les références avant affectation, en évitant les suppressions non sûres et en maintenant des relations de modèle cohérentes, les développeurs limitent les pannes récurrentes. Une gestion correcte des champs Many2one est cruciale pour préserver l’intégrité de la base et garantir un comportement fiable du système.
Corriger les erreurs au niveau architectural renforce la stabilité générale et facilite la maintenance à long terme des déploiements Odoo.
Questions fréquentes
Non. Elles peuvent apparaître sur toutes les versions d’Odoo.
Oui. Un mappage relationnel incorrect peut provoquer des échecs de synchronisation.
Seulement si le besoin métier impose réellement la présence de cette relation.