2015-07-30 10 views
5

In meinem Modul habe ich folgendes many2one Feld: 'xx_insurance_type': fields.many2one('xx.insurance.type', string='Insurance')odoo - Anzeigename many2one Feldkombination aus 2 Feldern

wo xx.insurance.type ist die folgende:

class InsuranceType(osv.Model): 
    _name='xx.insurance.type' 

    _columns = { 
     'name' : fields.char(size=128, string = 'Name'), 
     'sale_ids': fields.one2many('sale.order', 'xx_insurance_type', string = 'Sale orders'), 
     'insurance_percentage' : fields.float('Insurance cost in %') 
    } 

Ich weiß, dass das many2one Feld Takes Name Feld als sein Anzeigename, aber ich möchte es die Kombination name und insurance_percentage in Form von name + " - " + insurance_percentage + "%"

haben

Ich las es am besten ist es, die get_name Methode zu überschreiben, so dass ich die folgenden versucht:

def get_name(self,cr, uid, ids, context=None): 
    if context is None: 
     context = {} 
    if isinstance(ids, (int, long)): 
     ids = [ids] 

    res = [] 
    for record in self.browse(cr, uid, ids, context=context): 
     name = record.name 
     percentage = record.insurance_percentage 
     res.append(record.id, name + " - " + percentage + "%") 
    return res 

und platziert diese in der ÌnsuranceType` Klasse. Da nichts passiert ist: Muss ich es in der Hauptklasse, die das Feld enthält, platzieren? Wenn ja, gibt es eine andere Möglichkeit, dies zu tun, da dies wahrscheinlich auch die Anzeigewege der anderen many2one-Felder ändern wird?

+1

der Name der Methode ist 'name_get' statt' get_name' – ChesuCR

Antwort

9

Wenn Sie die Anzeigenamen des Restes der zum Modell xx.insurance.type nicht im Zusammenhang many2one ändern wollen Sie einen Kontext, in der XML-Ansicht auf die many2one Namen, deren Anzeige hinzufügen können, die Sie ändern mögen:

<field name="xx_insurance_type" context="{'special_display_name': True}"/> 

Und dann, in Ihrer name_get Funktion:

def name_get(self, cr, uid, ids, context=None): 
    if context is None: 
     context = {} 
    if isinstance(ids, (int, long)): 
     ids = [ids] 
    res = [] 
    if context.get('special_display_name', False): 
     for record in self.browse(cr, uid, ids, context=context): 
      name = record.name 
      percentage = record.insurance_percentage 
      res.append(record.id, name + " - " + percentage + "%") 
    else: 
     # Do a for and set here the standard display name, for example if the standard display name were name, you should do the next for 
     for record in self.browse(cr, uid, ids, context=context): 
      res.append(record.id, record.name) 
    return res 
+0

leider auch er * setzt den Namen der Datensätze *, so dass es m vermasselt y Datenbank. –

+0

Das ist großartig. Danke Mann, du hast mir den Tag gerettet. :) – weelDaw

Verwandte Themen