Models benutzen python um die PostgreSQL Datenbank zu manipulieren. Es können Tabellen und Felder angelegt werden ohne eine Zeile SQL schreiben zu müssen. Dafür ist das ORM(Object Relational Model) zuständig. Laut Odoo development Guidlines sollen models im Unterverzeichnis models des Moduls gespeichert sein.
Tabellen
In odoo werden python Klassen zu SQL Tabellen. Hierzu muss die Klasse von models.Model erben, dies ist eine Vorlage für die Übersetzung von python zu SQL.
Codeblock | ||||
---|---|---|---|---|
| ||||
from odoo import models class neueTabelle(models.Model): |
...
Codeblock | ||||
---|---|---|---|---|
| ||||
from odoo import models, fields
class neueTabelle(models.Model):
adresse = fields.Char() |
Andere Typen wären:
...
Es gibt Feldtypen die Beziehungen zwischen Tabellen herstellen können.
- fields.Many2one - Beziehung zu einem Eintrag in der anderen Tabelle(n zu 1 Beziehung im ER-Modell)
- fields.One2many - Beziehung zu allen Einträgen in der anderen Tabelle(1 zu n Beziehung im ER-Modell)
- fields.Many2many - Alle Felder einer Tabelle beziehen sich auf alle Felder der anderen Tabelle(n zu m Beziehung im ER-Modell)
Ein model benötigt auch einen Namen. Der übergebene String wird dann zum Namen der Tabelle in der Datenbank. Allerdings werden alle . durch _ ersetzt. Der Modulname sollte jedem model vorrangehen, um Tabellen und deren Namensräume zu trennen.
Codeblock | ||||
---|---|---|---|---|
| ||||
from odoo import models, fields
class neueTabelle(models.Model):
_name = 'Modulname.neueTabelle'
adresse = fields.Char() |
_name
Name der Tabelle in der Datenbank.(Es werden Punkte benutzt um Namensräume zu trennen) Beispiel:
_name = 'requiremnet.line'
Ebenfalls können bereits vorhandene models erweitert werden. Hierzu muss das, zu erweiternde, model gerbt werden.
Codeblock | ||||
---|---|---|---|---|
| ||||
from odoo import models, fields
class neueTabelle(models.Model):
_name = 'Modulname.neueTabelle'
_inherit = 'sale.order.line'
adresse = fields.Char() |
_inherit
Erben von Feldern und Methoden eines anderen Modells.
_inherit = "sale.order.line"