Étape 2 sur 2

Créer trois notes de départ

Le XML permet au module de créer quelques enregistrements connus à l'avance. Ce ne sont pas les notes que les utilisateurs saisiront eux-mêmes.

1. Créez le fichier XML

custom_addons/training_hello/data/training_note_data.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.

custom_addons/training_hello/__manifest__.py · repère d'insertion dans data
"data": [
    # ...
    "data/training_note_data.xml",  # ← ajoutez cette ligne
    # ...
],

Pour copier uniquement la ligne à ajouter :

custom_addons/training_hello/__manifest__.py · 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 :

custom_addons/training_hello/__manifest__.py · liste 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 :

pgAdmin 4 → Query Tool · ou psql dans la base d'exercice
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 :

Fenêtre Odoo Access Error indiquant qu'aucun groupe n'autorise l'accès aux records du modèle training.note.
Le record existe dans PostgreSQL, mais l'utilisateur connecté n'a encore aucun droit pour le lire depuis Odoo.

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

  1. Fermez la fenêtre d'erreur : vos notes de départ n'ont pas été perdues.
  2. Continuez la section 2, qui ajoute le model de catégories lié aux notes.
  3. À l'étape 2 de la section 3, créez le fichier security/ir.model.access.csv proposé. Il donne, pour l'exercice, aux utilisateurs internes les droits de lire, créer, modifier et supprimer les notes et les catégories.
  4. Déclarez ce fichier dans le manifeste, mettez Hello Odoo à niveau, puis réessayez d'ouvrir la note ou son identifiant externe.
Si l'erreur persiste après avoir créé le CSV

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.

custom_addons/training_hello/__manifest__.py · repère d'insertion dans 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.

Ne corrigez pas ce droit directement dans l'interface

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.

Question de contrôle

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.