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.
- 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. - 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.
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.
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.| Nom | Exemple | Rôle et emplacement |
|---|---|---|
| Identifiant de base | 8, par exemple | Clé primaire du record dans res_partner_category. Elle est locale à cette base : ne l'écrivez pas en dur dans le XML. |
| Identifiant externe | training_hello.partner_category_student | Nom 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 action | training_hello.hello_world | Clé 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.
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.
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.
- Vérifiez le fichier déclaré. Le fichier doit être
custom_addons/training_hello/data/partner_category_data.xmlet le manifeste doit contenir exactement"data/partner_category_data.xml". - 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. - 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.
- Vérifiez Contacts. La dépendance
contactsdoit être installée. Avec un compte administrateur, ouvrez Contacts → Configuration → Étiquettes de contact. - 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 logs --tail=200 -f odooLe 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 ?
- Connectez-vous avec un compte administrateur et activez le mode développeur, comme à l'étape 4 de la section 1.
- 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.
- Recherchez
training_hello.partner_category_student, puistraining_hello.partner_category_teacher. - 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.
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.