Questo sito utilizza cookie per le proprie funzionalità e per inviarti pubblicità e servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina o cliccando qualunque suo elemento acconsenti all’uso dei cookie.

Accedendo al link http://www.odoo-italia.org/index.php/home/cookie-policy puoi leggere in dettaglio le modalità di trattamento dei cookie da parte dell'Associazione Odoo Italia.

Benvenuto, Ospite
Nome utente: Password: Ricordami
  • Pagina:
  • 1
  • 2

ARGOMENTO: Filtrare in campo many2one non solo per nome?

Filtrare in campo many2one non solo per nome? 2 Anni 11 Mesi fa #23447

  • gbonline
  • Avatar di gbonline
  • Offline
  • Senior Boarder
  • Messaggi: 45
  • Ringraziamenti ricevuti 1
  • Karma: 0
Grazie per la risposta,
venerdi ho proprio provato ad utilizzare le 2 funzioni
name_get per la visualizzazione del name e
name_search per la ricerca .

in effetti raggiungo proprio lo scopo desiderato, peccato però che usando un modello che eredita da res.partner, ciò che ottengo è di sovrascrivere le funzioni dette sopra per cui in tutto openerp verranno usate queste 2 nuove !!
Vorrei che la funzionalità sia disponibile solo per il wizard nel quale ho bisogno !!
ti allego il codice delle fz che ho realizzato per provare.

    def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
        if not args:
            args = []
        ids = []
        if name:
            ids = self.search(cr, user, ['|',('card_code', operator, name),('name', operator, name)] + 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]
        reads = self.read(cr, uid, ids, ['name', 'card_code'], context=context)
        res = []
        for record in reads:
            name = record['name']
            if record['card_code']:
                name = record['card_code'] + ' ' + name
            res.append((record['id'], name))
        return res
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Filtrare in campo many2one non solo per nome? 2 Anni 11 Mesi fa #23449

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
Allora devi attivare tale comportamento solo se nel context è presente un certo valore (
if context.get('attiva_nuovo_comportamento'):
    fai_nuovo_comportamento
else:
    fai_comportamento_standard_chiamando_direttamente_super
), e impostare tale valore nel context nella view dove ti interessa abilitare il nuovo comportamento:
 <field name="partner_id" context="{'attiva_nuovo_comportamento': True}" />
Lorenzo Battistini
github.com/eLBati

TAKOBI
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: gbonline

Filtrare in campo many2one non solo per nome? 2 Anni 11 Mesi fa #23453

  • gbonline
  • Avatar di gbonline
  • Offline
  • Senior Boarder
  • Messaggi: 45
  • Ringraziamenti ricevuti 1
  • Karma: 0
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
Ultima modifica: 2 Anni 11 Mesi fa da gbonline.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Filtrare in campo many2one non solo per nome? 2 Anni 11 Mesi fa #23460

  • eLBati
  • Avatar di eLBati
  • Online
  • Platinum Boarder
  • Messaggi: 1766
  • Ringraziamenti ricevuti 186
  • Karma: 38
Bisognerebbe sempre chiamare il super per non rompere la catena delle dipendenze
Lorenzo Battistini
github.com/eLBati

TAKOBI
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Filtrare in campo many2one non solo per nome? 2 Anni 11 Mesi fa #23492

  • gbonline
  • Avatar di gbonline
  • Offline
  • Senior Boarder
  • Messaggi: 45
  • Ringraziamenti ricevuti 1
  • Karma: 0
Grazie della'avvertimento,
però penso che per name_get e name_search non sia necessario,
se lo scopo delle funzioni è di trovare i record che corrispondono ad una ricerca, le nuove fz sostituiscono in toto quelle originali.
Non è come le write o create che devono agire sul db per cui si chiama il super per eseguire il codice che scrive nel db.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.122 secondi

Odoo Italia Associazione - C.F: 94200470485 - Sede: Viale dei Cadorna, 83 - Firenze - Italy

Protected by R Antispam