Étape 1 sur 2

Créer un modèle de catégorie

Une note peut appartenir à une catégorie, comme « Réunion » ou « Idées ». Vous allez créer ce deuxième modèle, puis relier chaque note à une catégorie facultative.

1. Créez le modèle des catégories

Créez un second fichier de modèle. Une catégorie ne contient ici qu'un nom. Cette simplicité vous permet de voir clairement sa relation avec une note.

custom_addons/training_hello/models/training_note_category.py
from odoo import fields, models


class TrainingNoteCategory(models.Model):
    _name = "training.note.category"
    _description = "Catégorie de note"
    _order = "name"

    name = fields.Char(string="Nom", required=True)

À retenir : training.note.category devient la table PostgreSQL training_note_category lorsque le module est mis à niveau.

2. Importez le nouveau modèle

Dans models/__init__.py, conservez l'import de la note, puis ajoutez celui de la catégorie.

custom_addons/training_hello/models/__init__.py · repère d'insertion
from . import training_note
# ...
from . import training_note_category  # ← ajoutez cette ligne
# ...

Pour ajouter uniquement cette ligne, copiez :

custom_addons/training_hello/models/__init__.py · ligne à ajouter
from . import training_note_category

3. Reliez une note à sa catégorie

Dans TrainingNote, ajoutez le field suivant après body. Many2one signifie ici « une note a au plus une catégorie » ; plusieurs notes peuvent choisir la même catégorie.

custom_addons/training_hello/models/training_note.py · repère d'insertion
    body = fields.Text(string="Contenu")
    # ...
    category_id = fields.Many2one(  # ← ajoutez ce bloc
        ...
    )

Pour ajouter le bloc complet, copiez :

custom_addons/training_hello/models/training_note.py · bloc à ajouter
    category_id = fields.Many2one(
        "training.note.category",
        string="Catégorie",
        ondelete="set null",
    )

Le nom category_id est explicite dans Python et deviendra une colonne du même nom dans training_note. Les trois éléments passés entre parenthèses n'ont pas le même rôle :

  • "training.note.category" est le premier paramètre : il indique le model cible de la relation.
  • string="Catégorie" est un paramètre nommé : il donne le libellé visible dans l'interface Odoo, par exemple à côté de la liste déroulante du formulaire. Il ne change ni le nom technique category_id, ni la colonne PostgreSQL. Sans lui, Odoo fabriquerait un libellé à partir de category_id.
  • ondelete="set null" indique quoi faire si une catégorie est supprimée : la note est conservée, mais son champ category_id est vidé.

4. Mettez le module à niveau

  1. Redémarrez Odoo si votre environnement ne recharge pas les fichiers Python automatiquement.
  2. Dans Apps, ouvrez Hello Odoo et choisissez Mettre à niveau.

À observer : Odoo crée la table training_note_category et ajoute la colonne category_id à training_note. Vous n'exécutez ni CREATE TABLE ni ALTER TABLE : vos classes Python et la mise à niveau d'Odoo s'en chargent.