Grazie del suggerimento
vi propongo la soluzione che ho realizzato, in modo che sia generica il più possibile: aggiungendo nell xml i campi aggiunti , in name_search viene compilato un filtro con anche quei campi per la ricerca.
Se non si mette il la chiave nel context la ricerca funziona solo sul name.
# prova per extendere la ricerca oltre il campo name: nel context metto un campo "extended_search" con la lista dei campi !!!
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
if not args:
args = []
ids = []
extended = filter(None, context.get('extended_search', '').split(',')) # mi rende una lista vuota in caso di nessun elenco in 'extended_search'
if name:
new_filter = []
for field in extended:
new_filter.append('|')
new_filter.append((field, operator, name))
new_filter.append(('name', operator, name))
ids = self.search(cr, user, new_filter + args, limit=limit)
else:
ids = self.search(cr, user, args, context=context, limit=limit)
return self.name_get(cr, user, ids, context=context)
def name_get(self, cr, uid, ids, context=None):
if not ids:
return []
if isinstance(ids, (int, long)):
ids = [ids]
extended = filter(None, context.get('extended_search', '').split(','))
reads = self.read(cr, uid, ids, ['name'] + extended, context=context)
res = []
for record in reads:
name = record['name']
front = ''
for field in extended:
if record[field]:
front += record[field] + ' '
name = front + name
res.append((record['id'], name))
return res
ed ovviamente nel xml corrispondente occorre aggiungere un
tag context dizionario con i nomi dei campi aggiuntivi e separati da virgole, nel mio esempio ne uso solo uno
<field name="partner_id" context="{'extended_search':'card_code'}"/>
unico avvertimento, avendo modificato anche la name_get, non si esageri con l'elenco dei campi di ricerca, perchè ho fatto in modo che il "name" visualizzato comprende anche i valori dei campi supplementari
ciao e grazie