Les attributs de base des modèles Odoo

Introduction 

attributs modèle Odoo

Les applications Odoo sont des modules qui suivent le pattern de conception MVC (Model Vue Controller).  
Pour définir les modèles, On utilise le langage Python à travers la déclaration des classes sur lesquelles on suit une structure bien définie, pour pouvoir déclarer et définir les attributs, les champs et les fonctions (méthodes) nécessaire au modèle en question.  
Dans cet article, nous allons commençons par expliquer le rôle des attributs de base, qui définissent le comportement de modèle.  

Définition de la structure des modèles : 

Pour déclarer un modèle, on utilise une classe avec un nom qui commence par une majuscule.  Entre parenthèse on écrire le type de modèle que suit la classe créée.

 Parmi autres, Le modèle le plus utilisé est le models.Model. (Il existe d’autres types de modèles comme le modèle de transition et le modèle abstract) .
Pour décrire le comportement de notre modèle, on peut préciser des attributs en début de la déclaration de notre modèle, parmi ces attributs et durant cet article nous expliquons les attributs  _name, _description,_rac_name et _order

L’attribut _name :  

Cet attribut est obligatoire, il sert à définir  un nom en minuscule qui sera traduit par l’ORM Odoo, par la création d’une table sur la base de données, qui porte le nom indiqué dans ce paramètre, avec la conversion du ‘.’ En ‘_’ .
 Comme dans notre exemple de l’article précédent, nous avons défini cet attribut avec l’instruction :
 _name=’agence.vehicule’ , qui se traduit par la création d’une table agence_vehicule dans notre base de données PostgreSQL, ce qui implique que ce  nome doit être unique dans  la Base de données et dans les classe Python de l’instance Odoo  en cours . 

L’attribut _description : 

Cet attribut contient une description textuel compréhensive.
Bien que la précision de cet attribut soit optionnelle, mais elle est fortement recommandée, et permet une meilleure lisibilité et compréhensivité du code source.
Prenez donc l’habitude de donner pour chaque classe créée une brève description, comme démontré dans la ligne suivante :  

 _description='App Démo-Agence de Location de Véhicules'

L’attribut _order: 

Le but de cet attribut est de préciser les champs qui seront affichés par ordre croissant ou décroissant.
Par défaut si ce paramètre n’est pas précisé, Odoo affiche les enregistrements par ordre croissant sur l’attribut ID.
Dans notre exemple du modèle ‘agence.vehicule’, si on souhaite afficher  les champs date_achat (par ordre décroissant) et le champ marque ( par ordre croissant)  on utiliser  la déclaration suivante en début de classe :
_order = 'date_achat desc, marque'

L’attribut _rec_name: 

Avant de comprendre l’utilité de ce champ, il est nécessaire de comprendre le concept du champ descriptif d’un modèle
Le champ descriptif d’un modèle :
Dans notre modèle exemple ‘agence.vehicule’, nous avons défini un champ chaffeur_ids, qui extrait le nom d’un chauffeur à partir du modèle de base res.partner.
Par défaut, Odoo extrait ce nom à partir du champ name au lieu du champ ID, le champ name est  le champ qui va décrire au mieux notre modèle, Il est donc recommandé d’ajouter toujours, dans la définition de vos modèle, ce champ name. 

Personnaliser le champ descriptif d’un modèle : 

Pour personnaliser le champ descriptif d’un modèle, on utilise l’attribut _rec_name ,Pour que le compilateur ne prend pas le champ name, mais le champ que l’on souhaite, et qui sera définit dans la valeur de l’attribut _rec_name.
Pour se faire, on doit ajouter l’attribut _rec_name , suivi par le champ descriptif :
_rec_name=’designation_vehicule’
Et on ajoute le champ ‘designation_vehicule’ à notre modèle :
designation_vehicule= fields.Char('Désignation du Véhicule',required=True)
De cette manière on indique au compilateur Odoo le champ descriptif à prendre par défaut ‘designation_vehicule’. 

Surcharger la fonction _get_name , pour personnaliser la valeur  du champ descriptif : 

Dans notre cas, si on souhaite avoir la désignation qui décrit au mieux une véhicule, on doit combiner la marque, la série et le matricule, de cette manière on identifie clairement notre véhicule.
Pour se faire, on doit d’abord ajouter le champ matricule, puis nous surchargeant la fonction get_name   qui a par défaut comme résultat l’attribut _rec_name, avec notre propre implémentation.
Pour ajouter le champ matricule véhicule, on ajoute la ligne suivante :
matricule_vehicule= fields.Char('Désignation du Véhicule',required=True)
Et redéfinir la fonction get_name on ajoute cette fonction à notre modèle :
    def name_get(self):
        result = []
        for record in self:
            rec_name = "%s -%s -%s" % (record.marque,record.modele,record.matricule)
            result.append((record.id, rec_name))
        return result

 
Remarque imoprtante : 
Dans le cas d’abscence du champ name et de  l’attribut _rec_name et  de la personnalisation de la fonction name_get , le champ descriptif du modèle sera la combinaison entre le nom du modèle et l’ID de l’enregistrement comme :  (agence.vehicule,2)

Résultat de surcharge de la fonction name _get, avec notre implémentation personnalisée : 

La fonction qu’on vient de définir, a comme résultat l’affichage du champs descriptif, dans un autre modèle relié au modèle ‘agence.vehicule’ , sous forme de marque-modèle-matricule, par exemple  ‘Ford-Focus-298451621, comme présenté dans l’image.
 Nous reviendrons vers ce point dans l’article la relation entre les modèles, pour mieux comprendre le résultat de cette fonction, mais on peut déjà voir le résultat en haut sur le titre de l’enregistrement en cours, comme nous l’avons implémenté. 

Récapitulatif et application sur le modèle Véhicule de notre Example :

Maintenant que nous avons compris les concepts, nous reviendrons vers notre application exemple pour ajouter les concepts qu’on vient d’expliquer.
Pour se faire, nous allons suivre les étapes suivantes :

1.Mise à jour de notre modèle agence.vehicule

Mettez à jour le modèle agence.véhicule, qui se trouve dans le fichier agence_vehicule.py, en lui ajoutant les nouvelles concepts, le résultat va ressembler au code suivant :

from odoo import models, fields
class AgenceVehicule(models.Model):
    _name = 'agence.vehicule'
    _description='App Démo-Agence de Location de Véhicules'
    _order = 'date_achat desc, marque'
    _rec_name = 'designation_vehicule'
    # Les caractéristiques des véhicules
    marque = fields.Char('Marque', required=True)
    modele = fields.Char('Modèle', required=True)
    matricule = fields.Char('Matricule', required=True)
    designation_vehicule= fields.Char('Désingation')
    date_achat = fields.Date('Date d Achat')
    chaffeur_ids = fields.Many2many(
        'res.partner',
        string='Chaffeurs'
    )
    def name_get(self):
        result = []
        for record in self:
            rec_name = "%s -%s -%s" % (record.marque,record.modele,record.matricule)
            result.append((record.id, rec_name))
        return result

2.Mise à jour des Vues  

Mettez à jour le modèle agence.véhicule, qui se trouve dans le fichier agence_vehicule.py, en lui ajoutant les nouvelles concepts, le résultat va ressembler au code suivant :

Pour afficher les nouveaux champs matricule et désignation,  on doit les ajouter aux vues de notre module, qui se trouvent dans notre fichier xml agence_vehicule.xml :
Dans la vue Formulaire ajouter les deux lignes :
                <group>
                        <field name="marque"/>
                        <field name="modele"/>
                        <field name="matricule"/>
                        <field name="designation_vehicule"/>
                        <field name="chaffeur_ids" widget="many2many_tags"/>
                    </group>

De même, ajouter les deux lignes dans la vue Liste :
           <tree>
                    <field name="designation_vehicule"/>
                   <field name="matricule"/>
                    <field name="marque"/>
                    <field name="modele"/>
                    <field name="date_achat"/>
                </tree>

3.Redémarrage du serice Odoo  et mise à jour de notre module 

Application attributs de base ODoo

Nous avons effectué des changements au niveau du fichier python et fichier xml, donc pour Visualiser les changements, on doit redémarrer le service Odoo, et mettre à jour notre module.

Conclusion

Dans cet article, nous avons expliqué quatre attributs de base, qui entre dans la description de la partie Modèle de nos modules Odoo.
Nous avons donc expliqué les attributs _name, _description,_order_ et _rec_name avec des exemples pratiques afin de bien assimiler ces notions fondamentales.

Télécharger gratuitement votre  guide odoo ! 

Télécharger Gratuitement votre guide Odoo

Découvrez comment , Odoo  est une vraie opportunité pour les entreprises et les développeurs !


Télécharger !