Kann mir jemand etwas über verwandte Bereiche erklären? Zum Beispiel -
Wenn jemand ein kleines Beispiel für die reale Nutzung von Feldern geben kann. Ich würde mich freuen.
Damit können Sie ein Feld aus einer verwandten Tabelle ziehen. Weitere Details finden Sie im Entwicklerhandbuch . Ein Beispiel, das Sie sich ansehen sollten, ist das order_partner_id
-Feld der Klasse sale_order_line
. In Version 5.14 befindet sich das in Zeile 806 von addons/sale/sale.py
.
Ich finde oft, dass ich ein Feld in einer Liste anzeigen möchte, aber es ist auf einem übergeordneten Datensatz statt der tatsächlichen Tabelle, die ich auflisten.
Wenn Sie ein verwandtes Feld verwenden, müssen Sie zuerst auswählen, welches Feld verknüpft werden soll. Zum Beispiel erstelle ich ein neues Modul zum Hinzufügen von Studentendetails. Hier ist der Student eigentlich der Partner. Also _rec_name='partner_id'
wird genommen. In res.partner
haben Sie vielleicht das ref
-Feld gesehen. Der Wert im Feld ref
wird als internal_number
für das Schülermodul verwendet.
Also, was wir hier machen, ist
%Vor% Wenn das Feld, das wir als verwandtes Feld anzeigen möchten, ein Auswahlfeld ist, müssen Sie type='selection'
und selection=[(case1,case1),(case2,case2),...]
eine Liste von Tupeln angeben. Wenn es ein many2one-Feld ist, dann type='many2one'
und relation='model_name'
.
Sie finden ein Beispiel in der OpenERP-Entwicklerdokumentation, in der Normalisierung der Datenbank heißt es Transitive Abhängigkeit .
verwandte Felder führen das Steuerelement zu einer anderen Tabelle die Elterntabelle wird eine onetomany Beziehung mit der Kindtabelle haben, und die Kindtabelle hat eine viel-zu-eine Beziehung zu der Elterntabelle. zB: die account.invoice zu account.invoice.line mit dem folgenden Feld
'invoice_line': fields.one2many ('account.invoice.line', 'invoice_id', 'Rechnungszeilen', readonly = True, states = {'draft': [('readonly', False)]}) ,
und account.invoice.line beziehen sich auf account.invoice mit dem folgenden umgekehrten Code.
'invoice_id': fields.many2one ('account.invoice', 'Rechnungsreferenz', ondelete = 'cascade', select = True),