====== Structure Arborescente ====== ===== Product Categories ===== 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** ===== Propriétés du modèle ===== ^ _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 | ===== Champs du modèle ===== ^ 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 | ===== Exemple de liste ===== {{:erp:odoo12:screenshot_20201121_113048.png?nolink|}} ===== Contenu de la table ===== {{:erp:odoo12:screenshot_20201121_115711.png?nolink|}} ===== Code du modèle ===== # -*- 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