1. Créez le fichier XML
<?xml version="1.0" encoding="UTF-8"?>
<odoo noupdate="1">
<record id="training_note_welcome" model="training.note">
<field name="title">Bienvenue</field>
<field name="body">Une note est un enregistrement stocké par Odoo.</field>
</record>
<record id="training_note_observe" model="training.note">
<field name="title">Observer avant de modifier</field>
<field name="body">La mise à niveau est le moment où Odoo applique les fichiers du module.</field>
</record>
<record id="training_note_test" model="training.note">
<field name="title">Une base d'exercice</field>
<field name="body">Nous pouvons y apprendre sans toucher à des données réelles.</field>
</record>
</odoo>Chaque id est un identifiant externe stable. L'attribut noupdate="1" demande à Odoo de créer ces exemples sans écraser, lors d'une mise à niveau ultérieure, une modification faite dans Odoo.
2. Déclarez le fichier de données dans le manifeste
Le manifeste indique à Odoo quels fichiers charger et dans quel ordre. Partez de la liste construite au jour 1 : conservez toutes ses entrées, puis ajoutez seulement notre fichier de données à la fin. Les droits et les views n'existent pas encore ; nous les déclarerons dans la section 3, lorsqu'ils auront été créés.
data"data": [
# ...
"data/training_note_data.xml", # ← ajoutez cette ligne
# ...
],Pour copier uniquement la ligne à ajouter :
"data/training_note_data.xml",Voici la liste complète à ce stade. Vous pouvez la comparer à votre fichier, mais ne retirez aucune des entrées du jour 1 :
data complète à ce stade"data": [
"views/hello_world_menus.xml",
"data/partner_category_data.xml",
"views/partner_category_list.xml",
"data/training_note_data.xml",
],À observer : aucun chemin ne désigne encore security/ir.model.access.csv ni views/training_note_views.xml. Les déclarer maintenant ferait échouer la mise à niveau, car ces fichiers n'existent pas encore.
3. Chargez et vérifiez les notes
Mettez le module à niveau. Ces trois notes font partie du module et possèdent un identifiant externe. Dans pgAdmin, ouvrez Query Tool ; avec psql, utilisez la même requête :
SELECT id, title, body
FROM training_note
ORDER BY id;Résultat attendu : les trois titres ci-dessus apparaissent dans les lignes de training_note. Le XML du module est donc devenu des records Odoo, eux-mêmes persistés dans PostgreSQL.
Une note créée plus tard avec le formulaire est une donnée saisie par un utilisateur : elle ne doit pas être ajoutée dans ce fichier XML.
4. Pourquoi l'ouverture d'une note peut-elle être refusée ?
Avec le mode développeur, vous pouvez retrouver training_hello.training_note_welcome dans Paramètres → Technique → Séquences et identifiants → Identifiants externes. Si vous ouvrez le record ciblé à ce stade, Odoo peut afficher l'erreur ci-dessous :
Pourquoi ? Créer un model, une table et des records ne donne aucun droit aux utilisateurs. Odoo vérifie les droits d'accès à chaque ouverture du model, y compris lorsqu'on suit un lien depuis les identifiants externes. Le message « No group currently allows this operation » signifie qu'aucune règle d'accès n'a encore été chargée pour training.note.
La correction, dans le bon ordre
- Fermez la fenêtre d'erreur : vos notes de départ n'ont pas été perdues.
- Continuez la section 2, qui ajoute le model de catégories lié aux notes.
- À l'étape 2 de la section 3, créez le fichier
security/ir.model.access.csvproposé. Il donne, pour l'exercice, aux utilisateurs internes les droits de lire, créer, modifier et supprimer les notes et les catégories. - Déclarez ce fichier dans le manifeste, mettez Hello Odoo à niveau, puis réessayez d'ouvrir la note ou son identifiant externe.
Vérifiez d'abord que le manifeste charge réellement le fichier. Sans cette ligne, Odoo ne lit pas le CSV : le fichier peut exister sur le disque, mais aucune règle n'est créée dans la base.
data"data": [
# ... conservez les lignes déjà présentes
"security/ir.model.access.csv", # ← ajoutez cette ligne
# ...
],Enregistrez le manifeste, puis dans Apps, recherchez Hello Odoo et cliquez sur Mettre à niveau. Si vous venez d'ajouter le fichier ou de modifier le manifeste, redémarrez aussi Odoo lorsque votre lancement ne recharge pas ces fichiers automatiquement. Recharger seulement le navigateur ne suffit jamais.
Pour un module, les droits doivent être décrits dans security/ir.model.access.csv et conservés avec le code. Une modification manuelle dans Settings serait difficile à reproduire sur une autre base et disparaîtrait de votre historique Git.
Vous ajoutez une quatrième note avec un nouvel id. Que faut-il faire pour la voir ? Mettre le module à niveau ; recharger le navigateur ne suffit pas.