Je me suis basé sur le modèle existant dans Odoo.
Il s'agit du modèle product.category défini dans ./addons/product/models/product.py
_name | persofin.category | Nom du modèle |
---|---|---|
_parent_name | parent_id | Nom du champ indiquant l'enregistrement parent |
_parent_store | True | |
_rec_name | complete_name | |
_order | complete_name | Nom du champ utilisé pour le tri de l'arbre |
name | Nom de la catégorie | |
---|---|---|
complete_name | Nom complet | Calculé par _compute_complete_name |
parent_id | Enregistrement parent | Many2one |
parent_path | Liste d'IDs des parents | Chemin complet sous la forme x/y/z/ |
child_id | Enregistrements enfants | One2many |
# -*- coding: utf-8 -*- from odoo import api, fields, models class Category(models.Model): _name = 'persofin.category' _description = 'Personal Finance Category' _parent_name = 'parent_id' _parent_store = True _rec_name = 'complete_name' _order = 'complete_name' name = fields.Char( string = 'Name', index = True ) complete_name = fields.Char( string = 'Complete Name', compute = '_compute_complete_name', store = True ) parent_id = fields.Many2one( string = 'Parent Category', comodel_name = 'persofin.category', index = True, ondelete = 'cascade' ) parent_path = fields.Char( index = True ) child_id = fields.One2many( string = 'Child Categories', comodel_name = 'persofin.category', inverse_name = 'parent_id' ) @api.depends('name', 'parent_id.complete_name') def _compute_complete_name(self): for category in self: if category.parent_id: category.complete_name = '%s / %s' % ( category.parent_id.complete_name, category.name ) else: category.complete_name = category.name