Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

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
languagepy
themeMidnight
from odoo import models

class neueTabelle(models.Model):

...

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
languagepy
themeMidnight
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
languagepy
themeMidnight
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"