Étape 2 sur 2

Observer la catégorie dans PostgreSQL

Odoo a créé la structure. Nous allons maintenant ajouter deux catégories de départ et lire les tables avec des requêtes SELECT uniquement.

1. Ajoutez deux catégories de départ

Créez ce fichier XML. Ces catégories sont des exemples de formation ; elles ne remplacent pas les catégories que vous créerez ensuite dans l'interface.

custom_addons/training_hello/data/training_note_category_data.xml
<?xml version="1.0" encoding="UTF-8"?>
<odoo noupdate="1">
    <record id="training_note_category_meeting" model="training.note.category">
        <field name="name">Réunion</field>
    </record>
    <record id="training_note_category_idea" model="training.note.category">
        <field name="name">Idée</field>
    </record>
</odoo>

2. Déclarez le fichier dans le manifeste

Ajoutez le fichier de catégories après celui des notes. Ne déclarez que des fichiers qui existent déjà.

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

Pour copier uniquement la ligne à ajouter :

custom_addons/training_hello/__manifest__.py · ligne à ajouter
"data/training_note_category_data.xml",
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",
    "data/training_note_category_data.xml",
],

3. Lisez les deux tables, sans les modifier

Mettez le module à niveau. Dans pgAdmin, ouvrez Query Tool ; avec psql, exécutez les mêmes requêtes. Elles lisent les données, elles ne changent rien :

pgAdmin 4 → Query Tool · ou psql dans la base d'exercice
SELECT id, name
FROM training_note_category
ORDER BY id;

SELECT id, title, category_id
FROM training_note
ORDER BY id;

Résultat attendu : la première requête affiche Réunion et Idée. La seconde montre les notes déjà créées au jour 1 ; leur category_id est encore vide. C'est normal : nous les choisirons dans le formulaire de la section 3.

4. Lisez la clé étrangère

category_id est une clé étrangère : sa valeur référence l'id d'une ligne de training_note_category. Odoo a créé ce lien à partir de fields.Many2one.

pgAdmin 4 → Query Tool · ou psql dans la base d'exercice
SELECT conname, pg_get_constraintdef(oid)
FROM pg_constraint
WHERE conrelid = 'training_note'::regclass
  AND contype = 'f';

À observer : le résultat mentionne category_id et la table training_note_category. Ne créez ni ne modifiez cette contrainte avec SQL : si le modèle doit changer, modifiez le Python puis mettez le module à niveau.

5. Affecter une catégorie : la prochaine étape

À la fin de cette section, les catégories existent et la relation est prête, mais les notes de départ n'ont volontairement pas encore de catégorie. Nous n'allons pas remplir category_id avec une requête SQL : l'exercice doit montrer le vrai parcours d'Odoo.

  1. Dans la section 3, créez d'abord les droits et les views.
  2. Ouvrez Notes de formation → Notes.
  3. Ouvrez une note de départ, par exemple Bienvenue.
  4. Dans le field Catégorie, choisissez Réunion ou Idée, puis enregistrez.
  5. Rouvrez la note et lancez la requête de vérification : category_id référence désormais la catégorie choisie.

Ces gestes sont réalisés pas à pas dans l'étape 3 de la section 3. C'est cette écriture via le formulaire et le model Odoo — pas une modification SQL manuelle — qui complète la démonstration de la persistance.