L'environnement dans Odoo est un objet qui stocke diverses données contextuelles utilisées par le ORM. Ces données comprennent :
- L'utilisateur actuel (user)
- Le curseur (cr)
- Le drapeau superutilisateur (su)
- Le contexte (context)
1. Fonctions prédéfinies
env.ref(xml_id, raise_if_not_found=True)
Il renverra l'enregistrement correspondant à l'identifiant XML.
Exemple
>>> self.env.ref('base.user_admin') res.users(2,)
env.user
Il renverra l'utilisateur actuel de l'environnement. La sortie renvoyée sera un enregistrement de res.users.
env.lang
Il renverra le code de langue pour l'environnement actuel. Il sera de type chaîne de caractères.
env.company
Il renverra l'entreprise actuelle et sera un enregistrement du modèle res.company.
env.companies
Renvoyer un ensemble d'enregistrements des entreprises activées par l'utilisateur.
2. Modifiant l'environnement
with_context([context][, **overrides]) → records
Cette méthode crée une nouvelle version de cet ensemble d'enregistrements avec un contexte supplémentaire.
# current context is {'key1': True} result1 = records.with_context({}, key2=True) # result1._context is {'key2': True} result2 = records.with_context(key2=True) # result2._context is {'key1': True, 'key2': True}
with_user(user)
Renvoie une nouvelle version de cet ensemble d'enregistrements en mode non-superutilisateur connecté à celui spécifié, sauf si l'utilisateur est le superutilisateur.
with_company(company)
Renvoie une nouvelle version de cet ensemble d'enregistrements avec un contexte modifié, de sorte que :
result.env.company = company result.env.companies = self.env.companies | company
with_env(env)
Renvoie une nouvelle version de cet ensemble d'enregistrements attachée à l'environnement fourni.
3.SQL Execution
Le curseur pour la transaction de base de données actuelle est représenté par l'attribut cr sur les environnements.
Il vous permet d'exécuter directement du SQL au lieu d'utiliser le ORM, ce qui est utile pour des requêtes difficiles à définir avec le ORM (par exemple, des jointures complexes) ou pour des raisons de performance :
self.env.cr.execute("some_sql", params)