2010-10-08 4 views
8

Kann mir jemand etwas über verwandte Bereiche erklären? Zum Beispiel -Was nutzt verwandte Felder in OpenERP?

  • Wie es
  • Wie es
  • verwendet wurde
  • Für welche Art von Szenario geholfen werden kann ich

Wenn jemand ein kleines Beispiel für echte zur Verfügung stellen kann fields.related verwenden sollte Verwendung von Feldern. Ich würde es schätzen.

Antwort

9

Sie können ein Feld aus einer verwandten Tabelle ziehen. Sie können weitere Details in der developer book finden, und ein Beispiel zu betrachten ist das order_partner_id Feld der sale_order_line Klasse. 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.

+0

Ich war das gleiche denken, ich habe das Beispiel versucht, aus Entwickler-Buch auch, es ist großartig, in der vorherigen Version verwende ich, um dies durch Funktionsfeld zu erreichen - großartig, verwandte Felder jetzt zu haben - es funktioniert bis zu n Niveau! Bingo !!! - Danke – necromancer

1

Ein Beispiel finden Sie in der OpenERP-Entwicklerdokumentation. In der Normalisierung der Datenbank heißt es Transitive dependency.

8

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. So _rec_name='partner_id' ist 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 tun, ist

class student(osv.osv): 
    _name='student' 
    _rec_name='partner_id' 
    _columns ={ 
      'partner_id':fields.many2one('res.partner','Name'), 
      'internal_number':fields.related(
        'partner_id', 
        'ref', 
        type='char', 
        size=16, 
        string='Internal Number', 
        ), 
      } 

Wenn das Feld wir als Bezugsfeld zeigen wollen ein Auswahlfeld ist, dann haben Sie type='selection' und selection=[(case1,case1),(case2,case2),...], eine Liste von Tupeln bereitzustellen. Wenn es ein many2one-Feld ist, dann type='many2one' und relation='model_name'.

+0

wie man ein many2one verwandtes Feld dann? – m3asmi

+0

'country_id': felder.related ('partner_id', 'country_id', type = 'many2one', relation = 'res.land', string = 'Land'), – OmaL

1

Verwandte Felder führt das Steuerelement zu einer anderen Tabelle die Elterntabelle wird eine onetomany Beziehung mit der untergeordneten Tabelle haben, und die untergeordnete Tabelle haben eine viele toone Beziehung zu der übergeordneten Tabelle. zB: die account.invoice mit folgendem Feld account.invoice.line

'Rechnung': fields.one2many ('account.invoice.line', 'invoice_id', 'Rechnungsposten', nur lesbar = True, states = {'Entwurf': [('readonly', False)]}),

und account.invoice.line bezieht sich auf account.invoice mit dem folgenden Code in umgekehrter Reihenfolge.

'invoice_id': fields.many2one ('account.invoice', 'Rechnungsbezug', onDelete = 'Kaskade' wählen = True),