Étape 4 sur 7

Mettre à niveau et vérifier

Nous appliquons maintenant le nouveau fichier à la base, puis nous vérifions que les deux enregistrements existent réellement.

1. Mettez le module à niveau

À l'étape 3, vous avez modifié depends et/ou la liste data dans __manifest__.py. Odoo doit donc relire ce fichier avant la mise à niveau.

  1. Redémarrez Odoo comme vous l'avez fait jusqu'ici. Si vous avez testé avec succès --dev=reload à l'étape 4 de la section 1, enregistrez le manifeste et attendez le redémarrage indiqué dans les logs.
  2. Lorsque l'interface Odoo est de nouveau disponible, ouvrez Apps, recherchez Hello Odoo et choisissez Mettre à niveau.

La mise à niveau lit le XML et crée les enregistrements dans la base. Le redémarrage, lui, ne fait que relancer Odoo : à lui seul, il n'importe aucun fichier XML.

Plus tard, si vous modifiez uniquement data/partner_category_data.xml sans toucher au manifeste, passez directement par Mettre à niveau. Il n'est pas nécessaire de redémarrer Odoo une seconde fois.

2. Retrouvez les deux étiquettes

Avec un compte administrateur, ouvrez Contacts → Configuration → Étiquettes de contact. Recherchez Formation · Étudiant et Formation · Formateur.

Si les deux catégories apparaissent dans la liste Étiquettes de contact, le fichier a bien amorcé la base. Elles ne viennent ni d'une saisie manuelle ni d'un redémarrage du serveur.

Dans Contacts, la liste des étiquettes contient Formation · Étudiant et Formation · Formateur.
Résultat attendu : les deux étiquettes apparaissent dans Contacts. Sélectionnez l'image pour l'ouvrir en taille réelle.

3. Distinguez le record, son identifiant externe et un tag

Dans le XML, id="partner_category_student" ne devient pas une colonne de la table res_partner_category. Odoo crée d'une part le record métier — l'étiquette « Formation · Étudiant » — et, d'autre part, une référence stable qui permet de le retrouver lors d'une future mise à niveau.

Le fichier XML définit partner_category_student tandis que pgAdmin affiche le record Formation · Étudiant dans la table res_partner_category, avec son identifiant numérique.
Le id du XML est une référence du module ; la table affiche le record métier et son identifiant numérique de base de données. Sélectionnez l'image pour l'ouvrir en taille réelle.
NomExempleRôle et emplacement
Identifiant de base8, par exempleClé primaire du record dans res_partner_category. Elle est locale à cette base : ne l'écrivez pas en dur dans le XML.
Identifiant externetraining_hello.partner_category_studentNom stable formé du module et du id XML. Odoo le conserve dans ir_model_data avec le modèle et l'identifiant de base auxquels il renvoie.
Tag de client actiontraining_hello.hello_worldClé envoyée au navigateur pour retrouver le composant Owl. Elle est stockée dans le field tag de l'action client, pas dans ir_model_data.

Les mots « clé », « identifiant » ou « référence » sont parfois employés de manière informelle, mais ils ne sont pas interchangeables ici. Un identifiant externe relie durablement des données Odoo au code d'un module. Un tag relie une action client au JavaScript chargé dans le navigateur. L'identifiant numérique relie une ligne à sa table PostgreSQL.

Observez le registre des identifiants externes

Dans pgAdmin, cette requête de lecture affiche toutes les références créées par training_hello. Elle mélange volontairement les types de records : données, action, menu et, après le jour 2, la définition du model training.note.

pgAdmin 4 → Query Tool · base d'exercice
SELECT module, name, model, res_id
FROM ir_model_data
WHERE module = 'training_hello'
ORDER BY model, name;

Vous y retrouverez notamment partner_category_student qui pointe vers res.partner.category. Le model lui-même reçoit aussi une référence technique : après la mise à niveau du jour 2, cherchez model_training_note, qui pointe vers la définition du model dans ir.model, et non vers une note dans training_note. L'action créée en section 2 possède l'identifiant externe training_hello.training_hello_action ; son tag training_hello.hello_world reste une valeur distincte dans cette action.

Retrouvez le même registre dans Odoo

Avec le mode développeur et un compte administrateur, ouvrez Paramètres → Technique → Séquences et identifiants → Identifiants externes. Selon la langue de votre interface, les libellés peuvent apparaître en anglais : Settings → Technical → Sequences & Identifiers → External Identifiers. Filtrez sur le module training_hello, puis ouvrez training_hello.partner_category_student : Odoo vous indique le model et le record ciblés.

Écran Identifiants externes d'Odoo, filtré sur training, où les actions, menus et views du module training_hello apparaissent avec leur model et leur identifiant de record.
Odoo rassemble dans le même registre les identifiants externes de différents types de records : actions, menus, views et données XML. Le filtre training_hello permet de ne voir que ceux du module d'exercice.

4. Si les deux étiquettes n'apparaissent pas

Suivez ce diagnostic dans l'ordre. Il permet d'identifier le point de blocage sans modifier ni supprimer de données.

  1. Vérifiez le fichier déclaré. Le fichier doit être custom_addons/training_hello/data/partner_category_data.xml et le manifeste doit contenir exactement "data/partner_category_data.xml".
  2. Vérifiez la relecture du manifeste. Après sa modification, vous devez soit redémarrer Odoo, soit constater dans les logs le redémarrage automatique déjà testé avec --dev=reload. Passez ensuite à la mise à niveau.
  3. Lisez le résultat de la mise à niveau. Une erreur XML annule la mise à niveau : le message utile est alors dans les logs Odoo, sous la forme d'un traceback.
  4. Vérifiez Contacts. La dépendance contacts doit être installée. Avec un compte administrateur, ouvrez Contacts → Configuration → Étiquettes de contact.
  5. Contrôlez les identifiants externes. Cette vérification indique si Odoo a bien créé les deux enregistrements, même si un filtre les masque dans Contacts.

Où lire un traceback ?

Un traceback est le détail de l'erreur affiché par Odoo lorsqu'une opération échoue. Cherchez la première ligne qui mentionne votre fichier XML ou training_hello, puis l'erreur qui la suit ; elle indique généralement le fichier, la ligne et la cause à corriger.

Sans Docker : regardez le terminal dans lequel vous avez lancé odoo-bin. Si Odoo est démarré par un service sur votre machine, utilisez le journal prévu par votre procédure d'installation plutôt que de deviner une commande système.

Avec Docker Compose : placez-vous dans le dossier qui contient le fichier Compose et gardez les logs du service Odoo ouverts pendant la mise à niveau :

Docker Compose · dossier du fichier Compose
docker compose logs --tail=200 -f odoo

Le nom odoo est celui utilisé dans cette formation ; adaptez-le seulement si votre service porte un autre nom. Arrêtez l'affichage des logs avec Ctrl/Cmd + C après avoir lu l'erreur.

Comment vérifier un identifiant externe dans Odoo ?

  1. Connectez-vous avec un compte administrateur et activez le mode développeur, comme à l'étape 4 de la section 1.
  2. Ouvrez Paramètres → Technique → Séquences et identifiants → Identifiants externes. Selon la langue de votre interface, les libellés peuvent apparaître en anglais : Settings → Technical → Sequences & Identifiers → External Identifiers.
  3. Recherchez training_hello.partner_category_student, puis training_hello.partner_category_teacher.
  4. Pour chaque résultat, ouvrez la ligne et vérifiez qu'elle pointe vers un enregistrement res.partner.category.

Les deux identifiants présents confirment que le XML a été importé. noupdate="1" ne bloque pas cette première création. Si les identifiants existent mais que les libellés ne sont pas visibles, examinez les filtres de Contacts et les enregistrements ciblés ; ne redémarrez pas Odoo à répétition et ne supprimez ni la base ni les données existantes.

5. Observez le rôle de noupdate

Changez temporairement le nom d'une étiquette dans le XML, puis mettez encore le module à niveau. Avec noupdate="1", la valeur existante doit rester intacte. Ajoutez ensuite un troisième record avec un nouvel identifiant externe : celui-ci doit être créé à la prochaine mise à niveau.

Le point à retenir

Installer ou mettre à niveau transforme des fichiers versionnés en enregistrements de base de données. Redémarrer Odoo ne réalise pas cette transformation.