Se rendre au contenu

Corriger l’erreur « Record Does Not Exist or Has Been Deleted » dans Odoo

Comprenez et résolvez l’erreur « record does not exist » dans Odoo : explications claires, causes fréquentes et procédures pas à pas destinées aux utilisateurs et développeurs Odoo.
17 février 2026 par
Elisa Van Outrive
| Aucun commentaire pour l'instant

Introduction


L’erreur « Record does not exist or has been deleted » est l’un des messages les plus déroutants pour les utilisateurs d’Odoo. Elle surgit souvent sans avertissement lorsqu’on ouvre un formulaire, qu’on valide un enregistrement ou qu’un processus automatisé s’exécute.


Malgré sa formulation alarmante, cette alerte signale le plus souvent une référence cassée — un lien vers une donnée qui n’existe plus ou n’est pas accessible — plutôt qu’une corruption générale de la base.


Voyons concrètement ce que cache ce message et quelles sont les étapes sûres pour résoudre le problème sans aggraver la situation.

Que signifie cette erreur


Odoo tente d’accéder à un enregistrement à partir d’un identifiant qui :


  • n’existe plus dans la base
  • a été supprimé
  • n’est pas visible à cause des droits d’accès
  • appartient à une autre société (contexte multi-sociétés)

Exemple pratique :


record = self.env['res.partner'].browse(45)

Si l’identifiant 45 n’existe pas, Odoo lève l’erreur.



Causes fréquentes



1. Des enregistrements supprimés toujours référencés

Des champs Many2one peuvent pointer vers des lignes qui ont été effacées, créant des références orphelines.


Cela arrive souvent après :


  • suppression manuelle d’entrées
  • nettoyage de données de test
  • imports ayant échoué ou interrompus

2. Mauvais mappage d’identifiants externes


Lors d’intégrations, des systèmes tiers peuvent envoyer des IDs qui ne correspondent pas à la base Odoo.

Par exemple, si Odoo reçoit :


{ "partner_id": 99999 }

et que cet ID n’existe pas, l’erreur survient.


3. Contrainte multi-sociétés


L’enregistrement existe mais n’apparaît pas dans le contexte de la société courante.

Une vérification en superutilisateur révèle souvent la présence de l’enregistrement.


4. Problèmes après migration ou mise à jour


Après une montée de version ou une réorganisation de modules, certains liens peuvent pointer vers des enregistrements obsolètes ou restructurés.

Comment la corriger


Étape 1 – Vérifier l’existence de l’enregistrement

record = self.env['model.name'].browse(record_id) if record.exists(): # utilisation sûre

Étape 2 – Contrôler les droits d’accès


Testez la visibilité avec un compte administrateur.

Si l’admin voit l’enregistrement mais pas l’utilisateur → problème de règle d’accès ou de record rule.


Étape 3 – Corriger les champs relationnels


Repérez les Many2one orphelins et corrigez-les ou mettez-les à null selon le besoin.


Étape 4 – Valider les intégrations externes


Passez en revue :


  • les payloads API reçus
  • la logique de mapping
  • la couche de synchronisation

Un mauvais mappage d’IDs est une cause récurrente dès qu’on relie plusieurs systèmes.



Comment l’éviter



  • Évitez de coder des IDs en dur
  • Utilisez correctement les external IDs (xml_id)
  • Validez les entrées API avant insertion
  • Testez les migrations et imports sur un environnement de préproduction
  • Ne supprimez pas d’enregistrements tant qu’ils sont référencés ailleurs


Comment Dasolo empêche l’erreur “Record Does Not Exist”


L’erreur « Record Does Not Exist » survient généralement quand les relations entre modèles deviennent incohérentes. Bien que visible dans l’interface, l’origine est souvent une suppression, un lien rompu ou une manipulation directe de la base faite sans précaution.


Chez Dasolo, nous considérons cette erreur comme un signal structurel et non comme un incident isolé. Elle révèle fréquemment :


  • des références relationnelles orphelines
  • des workflows de suppression inadaptés
  • des mismatches dans les intégrations
  • l’absence de contrôles de validation avant l’accès aux enregistrements
  • une gestion incohérente du contexte multi-sociétés

Pour éviter ces cas, nous construisons des systèmes Odoo avec une gestion stricte du cycle de vie des données. Plutôt que de supprimer, nous privilégions l’archivage, et nous imposons des pratiques ORM robustes pour préserver l’intégrité référentielle. Ainsi, les exceptions « record not found » deviennent rares en production.



Conclusion


L’erreur Odoo « Record Does Not Exist » se produit lorsque le système tente d’accéder à un enregistrement supprimé ou jamais créé correctement. Derrière cette apparence de donnée manquante se cache souvent une logique relationnelle brisée ou une opération sur la base effectuée sans garanties.


En maintenant une architecture relationnelle cohérente, en vérifiant l’existence avant d’accéder aux enregistrements et en évitant les manipulations directes de la base, les développeurs réduisent nettement l’apparition de ce problème. Dans des environnements Odoo bien conçus, l’intégrité des enregistrements est assurée par des processus maîtrisés et prévisibles.


Traiter correctement cette erreur ne corrige pas seulement le message affiché : cela renforce la stabilité de la base et la fiabilité du système à long terme.

Questions fréquentes


Pas forcément. Il peut simplement être inaccessible selon le contexte ou les droits.

Oui, en particulier les synchronisations automatisées qui s’attendent à trouver des références valides.

Uniquement si vous êtes certain qu’aucune dépendance relationnelle n’existe ou après avoir appliqué une stratégie d’archivage appropriée.


Elisa Van Outrive 17 février 2026
Partager cet article
Se connecter pour laisser un commentaire.