2015-07-30 9 views
5

W moim module Mam następujące pola many2one: 'xx_insurance_type': fields.many2one('xx.insurance.type', string='Insurance')odoo - nazwa wyświetlana kombinacji pola many2one 2 pól

gdzie xx.insurance.type jest następujący:

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 %') 
    } 

wiem pole many2one bierze nazwa pole jako wyświetlana nazwa, ale chciałbym, aby to było połączenie z name i insurance_percentage w postaci name + " - " + insurance_percentage + "%"

czytam najlepiej jest zastąpić metodę get_name więc próbowałem następujące:

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 

i umieszcza to wewnątrz klasy ÌnsuranceType`. Ponieważ nic się nie stało: Czy muszę umieścić go wewnątrz głównej klasy zawierającej pole? Jeśli tak, czy istnieje inny sposób, aby to zrobić, ponieważ prawdopodobnie zmieni to również sposób wyświetlania innych pól many2one?

+1

Nazwa metody jest 'name_get' zamiast' get_name' – ChesuCR

Odpowiedz

9

Jeśli nie chcesz, aby zmienić wyświetlaną nazwę reszty many2one związanej z modelem xx.insurance.type można dodać kontekst w widoku XML do many2one którego nazwa wyświetlana chcesz zmodyfikować:

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

A potem, w name_get funkcję:

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

Niestety to również zestawy * * nazwę zapisów, więc bałagan m baza danych y. –

+0

To jest świetne. Dzięki człowieku, uratowałeś mi dzień. :) – weelDaw