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

ARGOMENTO: [Odoo 9.0] - Filtro search custom dinamico

[Odoo 9.0] - Filtro search custom dinamico 2 Anni 4 Mesi fa #25585

  • Dared
  • Avatar di Dared
  • Offline
  • Fresh Boarder
  • Messaggi: 4
  • Karma: 0
Ciao a tutti,
ho la necessità di creare un filtro di ricerca custom "dinamico", che filtri i risultati per il criterio impostato nel dominio.
Per dinamicità, intendo che il valore settato nel dominio deve essere variabile e recuperato dal contesto.

Nello specifico, ho un campo many2many in un wizard, che attraverso la funzione integrata (link: Add an item) apre un altro wizard (classico wizard di default di Odoo) in cui è possibile ricercare/filtrare/raggruppare e quindi selezionare o creare gli elementi da aggiungere al campo many2many.

Il campo many2many è il seguente:
<field name="pricelist_item_ids" context="{'search_default_pricelist': 1, 'pricelist_id_id': 12}">

La definizione del filtro in questione è:
<record model="ir.ui.view" id="view_filter1">
           <field name="model">model</field>
           <field name="type">search</field>
           <field name="arch" type="xml">
               <search string="">
                   <filter string="Selected Pricelist" 
                       name="pricelist" 
                       domain="[('pricelist_id','=', VALORE DINAMICO)]"/>
               </search>
           </field>
</record>

In VALORE DINAMICO vorrei recuperare tramite context il valore "pricelist_id_id" => context ma Odoo restituisce un errore di KeyError, come se non trovasse il valore nel contesto.

Possibile che non è possibile accedere utilizzare il contesto, nella definizione del dominio di un filtro di ricerca?
Sbaglio approccio?

Con valori statici invece funziona tutto come dovrebbe:
domain="[('pricelist_id','=', 12)]

Esistono altre strade percorribili? Mi sembra strano che non posso rendere dinamico un filtro, sulla base di un id passato nel contesto. Magari bisogna intervenire lato python, facendo l'override di qualche metodo particolare?

P.S sto utilizzando Odoo 9.0!

Grazie in anticipo
Ultima modifica: 2 Anni 4 Mesi fa da Dared.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[Odoo 9.0] - Filtro search custom dinamico 2 Anni 4 Mesi fa #25589

  • iw3hxn
  • Avatar di iw3hxn
  • Offline
  • Gold Boarder
  • Messaggi: 252
  • Ringraziamenti ricevuti 93
  • Karma: 2
Ciao Dared, vedo che se un nuovo iscritto

ti invito ad una breve presentazione

www.odoo-italia.org/index.php/kunena/salve

grazie
Carlo Vettore
Presidente Odoo Italia
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo....
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Ringraziano per il messaggio: Dared

[Odoo 9.0] - Filtro search custom dinamico 2 Anni 4 Mesi fa #25593

  • Dared
  • Avatar di Dared
  • Offline
  • Fresh Boarder
  • Messaggi: 4
  • Karma: 0
Fatto ;)!
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

[Odoo 9.0] - Filtro search custom dinamico 2 Anni 4 Mesi fa #25597

  • Dared
  • Avatar di Dared
  • Offline
  • Fresh Boarder
  • Messaggi: 4
  • Karma: 0
Ho risolto il problema da solo :wave:

Una soluzione percorribile è quella di fare l'override del metodo fields_view_get nel modello per il quale eseguire la ricerca. Questo metodo viene invocato nella generazione di ogni tipo di view del modello (form, tree, search). Basta intercettare il metodo quando genera il campo di ricerca, ricercare il filtro (precedentemente dichiarato tramite xml) con xpath nell'xml recuperato e settare il dominio (per il filtro) direttamente da codice in maniera dinamica.

@api.model
	def fields_view_get(self, view_id=None, view_type='tree', context = None, toolbar = False, submenu = False):
		result = super(PriceListClass,self).fields_view_get(view_id=view_id,view_type=view_type,toolbar=toolbar,submenu=submenu)
		if view_type == 'search':
                        pricelist_id = self.env.context.get('pricelist_id_id', False)
			doc = etree.XML(result['arch'])
			for node in doc.xpath("//filter[@name='pricelist']"):
				node.set('domain', "[('pricelist_id', '=', " + str(pricelist_id) + ")]")
			result['arch'] = etree.tostring(doc)
		return result

Nell'xml invece, il dominio può essere inizializzato a vuoto dato che poi verrà modificato lato server:
<record model="ir.ui.view" id="view_filter1">
           <field name="model">model</field>
           <field name="type">search</field>
           <field name="arch" type="xml">
               <search string="Custom Filter">
                   <filter string="Pricelists" 
                       name="pricelist" 
                       domain="[]"/>
               </search>
           </field>
</record>
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.124 secondi

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

Protected by R Antispam