Le langage d'un progiciel : modèles, champs et requêtes

Ce qu'on écrit quand on programme dans un progiciel, sur l'exemple d'Odoo en Python : modèles et champs (dont les relations), les quatre opérations sur les enregistrements, les ensembles d'enregistrements et le filtre en notation préfixée.

  • 24 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. Comprendre

Quelques cartes du deck

  • ORM (mapping objet-relationnel) : de quoi s'agit-il ?

    Voir la réponse

    Couche qui fait correspondre les classes et les objets du programme aux tables et aux lignes de la base, et traduit les appels du code en requêtes SQL.

    Dans Odoo, on appelle search, create, write ou unlink sur un modèle plutôt que d'écrire du SQL à la main : l'ORM s'occupe de la requête, des droits d'accès et du cache.

  • Que contient la variable orders après cette ligne ?

    ```python
    orders = self.env['sale.order'].search([('state', '=', 'sale')])
    `

    • Un ensemble d'enregistrements : les commandes à l'état sale, éventuellement aucune
    • Une liste Python de dictionnaires, un dictionnaire par commande trouvée dans la base
    • Une seule commande : la première qui a été trouvée par la recherche
    • Le nombre entier de commandes qui ont été trouvées par la recherche
    Voir la réponse

    Un ensemble d'enregistrements : les commandes à l'état sale, éventuellement aucune

    search rend toujours un ensemble, même vide ou d'un seul élément. Le nombre s'obtient avec search_count ou len(orders).

  • Les quatre opérations de base de l'ORM sur les enregistrements sont … pour trouver, … pour ajouter, … pour modifier et … pour supprimer.

    Voir la réponse

    Les quatre opérations de base de l'ORM sur les enregistrements sont search pour trouver, create pour ajouter, write pour modifier et unlink pour supprimer.

    Elles forment le CRUD (create, read, update, delete) : la lecture passe par search puis par l'accès aux champs de l'ensemble obtenu.

  • Modèle (dans un progiciel) : de quoi s'agit-il ?

    Voir la réponse

    Classe qui décrit un type d'objet de gestion, comme la commande, le client ou l'article : ses données et ses méthodes. Chacun correspond à une table de la base.

    En Odoo, class Loan(models.Model) avec _name = 'library.loan' crée le modèle library.loan et sa table library_loan.

  • Une commande contient plusieurs lignes, et chaque ligne n'appartient qu'à une seule commande. Quels champs déclare-t-on ?

    • Un Many2one de la ligne vers la commande, et sur la commande un One2many qui en est l'inverse
    • Un One2many sur la ligne qui désigne sa commande, et sur la commande un Many2one vers sa première ligne seulement
    • Un Many2many sur la commande et un Many2many sur la ligne, reliés ensemble par une table d'association
    • Un Many2one sur la commande et un Many2one sur la ligne, qui se pointent l'un l'autre sans inverse
    Voir la réponse

    Un Many2one de la ligne vers la commande, et sur la commande un One2many qui en est l'inverse

    La clé étrangère vit du côté « plusieurs » : la ligne. Le One2many de la commande ne stocke rien, il relit les lignes par inverse_name, le nom du Many2one de la ligne.