models

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.

from odoo import models

class neueTabelle(models.Model):

Diese Tabelle würde keine Spalten außer denen die Odoo standardmäßig anlegt.


Um eigene Felder anzulegen überlegt man sich von welchem Typ das Feld seien soll. Möchte man Beispielsweise eine Adresse speichern so wählt man den Typ Char, da dieser sowohl Buchstaben als auch Zahlen darstellen kann.


from odoo import models, fields

class neueTabelle(models.Model):
	adresse = fields.Char()


Andere Typen wären:

  • fields.Char() - Text mit bis zu 255 Zeichen
  • fields.Integer() - ganze Zahl
  • fields.Float() - Kommazahlen(64 bit länge)
  • fields.Text() - Textfeld mit bis zu 65535 Zeichen
  • fields.Binary() - für binäre Daten wie Bilder
  • fields.DateTime() - python DateTime Objekt

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.

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.

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"