2015-11-23 3 views
5

Ich versuche, Kommentarfeld (interne Kundennotizen) von res_partner zu Rechnungsrechnungsmodul abzurufen. Jetzt möchte ich es nur später drucken, ich werde es in XML-Code einschließen. Ich habe versucht, auf drei Arten wie diese,Wie verwandte Felder (fields.related) in odoo-8 zu verwenden?

1)comment2 = fields.Char(string='Comment',related='res_partner.comment',compute='_compute_com') 
@api.multi 
def _compute_com(self): 
    print self.comment2 

2)comment = fields.Many2one('res.partner','Comment',compute='_compute_com') 
    @api.multi 
    def _compute_com(self): 
    print self.comment 

3)partner_comment = fields.Char(compute='_compute_com') 
@api.multi 
def _compute_com(self): 
    Comment = self.env['res.partner'].browse(partner_id).comment 
    print Comment 
+0

können Sie Ihr Problem erklären ???? – user00000341

+0

Die von Ihnen geschriebene Option 1 ist die richtige Antwort auf Ihre Frage. –

+0

Nein, ich habe versucht, es funktioniert nicht ich bekomme Fehler als Keyerror: res_partner – Bhanukiran

Antwort

12

Sie sollten ein Bezugsfeld verwenden statt:

comment = fields.Char(related='partner_id.comment') 

Wenn Sie es in Ihrem account_invoice Datensatz speichern müssen müssen Sie auch den Parameter store = True Problem ist, auf diese Weise hinzufügen können Sie nicht einfach drucken, aber wenn Sie es zeigen, Sie müssen es in Ihre Sicht bringen.

Wenn Sie es wirklich temporarly drucken müssen müssen Sie diese andere Art und Weise tun:

comment = fields.Char(compute='_compute_comment') 

def _compute_comment(self): 
    for record in self: 
     record.comment = partner_id.comment 
     print record.comment 
+0

Hey Ihre 2. Antwort funktioniert dank – Bhanukiran

+0

cool. Denken Sie daran, die erste Lösung zu verwenden, wenn Sie sie nicht mehr drucken müssen ... –

1

in odoo8

wenn gleiche Objektfelder müssen im Zusammenhang dann können Sie verwenden store = True

comment2 = fields.Char(string='comment',related='comment', store=True) 
Zusammenhang = "related Feldname" verwenden

LINK

2

Verwandte Feld

ist es nicht mehr fields.related Felder aus.

Stattdessen setzen Sie nur das Argument Name für Ihr Modell bezogen werden:

participant_nick = fields.Char(string='Nick name', 
          related='partner_id.name') 

Der Typ kwarg nicht mehr benötigt wird.

Wenn Sie den Speicher kwarg setzen, wird der Wert automatisch in der Datenbank gespeichert. Mit der neuen API wird der Wert des zugehörigen Feldes automatisch aktualisiert, süß.

participant_nick = fields.Char(string='Nick name', 
          store=True, 
          related='partner_id.name') 

Note

When updating any related field not all translations of related field are translated if field is stored!!

Verkettete verwandten Bereichen Änderung wird für alle Elemente der Kette Ungültigmachung des Cache-Speichers auslösen.

0

ein Problem mit meinem verwandten Bereich haben, ich habe zwei Klassen: Nomenklatur und projet_ligne i auf ‚eta‘ den Wert von ‚sous‘ bekommen so meinen Code gibt s

class nomenclature(models.Model): 
_name = 'nomenclature' 

name = fields.Char('Nom de la nomenclature',required=True) 
quantite = fields.Integer('Quantité',required=True) 
produit=fields.Many2one('product.product') 
sous= fields.Boolean('sous') 

class projet_ligne(models.Model): 
_name = 'projet.ligne' 
#name = fields.Char('nom du sous essaie',required=True) 
nomenclature=fields.Many2one('nomenclature',required=True) 
responsable=fields.Many2one('res.users',) 
projet = fields.Many2one('projet',required=True) 
date= fields.Date() 
etat=fields.Boolean('Achevé?') 
reference= fields.Char('Réference') 
nature= fields.Char('Nature') 
dateprelevement= fields.Date() 
lieuprelevement= fields.Char('lieu') 
etatvalider= fields.Boolean('Validé') 
eta= fields.Boolean(related='nomenclature.sous') 

Es spielt keine t Arbeit :/

+0

Dies ist keine Antwort ... – Jerther