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: Domain non trova un field... appena dichiarato

Domain non trova un field... appena dichiarato 5 Anni 8 Mesi fa #12427

  • elena_the_witch
  • Avatar di elena_the_witch
  • Offline
  • Junior Boarder
  • Messaggi: 35
  • Karma: 0
Ciao a tutti,
ho un problema con un domain.
Su openerp-italia ho trovato questo codice di esempio: domain=”[('company_id', '=', parent.company_id)]”.

Ho cercato di sfruttarlo in una mia form (ecco uno spezzone):
...
<field name="lines" widget="one2many_list">
<tree editable="top">
<field name="wp_id" domain="[('correct', '=', True)]"/>
<field name="voice" widget="selection" domain="[('id', '=', wp_id.id)]"/>
...

ma ottengo il messaggio d'errore:

2013-06-19 15:39:40,151 6605 ERROR proj5 openerp.tools.safe_eval: Cannot eval "[('id', '=', wp_id.id)]"
Traceback (most recent call last):
File "/opt/openerp/server/openerp/tools/safe_eval.py", line 241, in safe_eval
return eval(test_expr(expr, _SAFE_OPCODES, mode=mode), globals_dict, locals_dict)
File "", line 1, in <module>
NameError: name 'wp_id' is not defined

ma se l'ho dichiarato una riga sopra!!!!

Se qualcuno ha un'idea mi aiuti perché mi sono bloccata...
Grazie in anticipo!
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Domain non trova un field... appena dichiarato 5 Anni 8 Mesi fa #12428

  • NicoTheBrush
  • Avatar di NicoTheBrush
  • Offline
  • Platinum Boarder
  • Messaggi: 1952
  • Ringraziamenti ricevuti 156
  • Karma: 46
Puoi postare anche la dichiarazione dei fields?
in prima battuta di direi togli il .id lasciando solo wd_id nel filtro
in seconda battuta che si può fare anche un onchange su wp_id che ritorna il domain da impostare a voice
.. vediamo il fields però :)
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Domain non trova un field... appena dichiarato 5 Anni 7 Mesi fa #12437

  • elena_the_witch
  • Avatar di elena_the_witch
  • Offline
  • Junior Boarder
  • Messaggi: 35
  • Karma: 0
Ecco le precisazioni richieste:

la classe 'block' ha un campo o2m con la classe 'item':
+++++++++++++++++
_columns={
'items': fields.one2many('my.module.item', 'block_id', 'Items'),
+++++++++++++++++

la classe 'item' ha un campo 'type' che è m2o con classe 'type':
+++++++++++++++++
_columns={
'type': fields.many2one('my.module.type', 'Type Reference'),
'block_id': fields.many2one('my.module.block', 'Block Reference', ondelete='cascade'),
+++++++++++++++++

Inoltre una classe 'line' ha:
+++++++++++++++++
_columns = {
'block_id': fields.many2one('my.module.block', 'Block', required=True),
'type': fields.many2one('my.module.type', 'Type', required=True),
+++++++++++++++++

e una classe 'pack' che ha un o2m di line ha la relativa view:
+++++++++++++++++
<field name="lines" widget="one2many_list">
<tree editable="top">
<field name="block_id" widget="selection" domain="[('package', '=', True)]"/>
<field name="type" widget="selection" domain="[('id', 'in', block_id.items.type.id)]"/>
+++++++++++++++++

Spiego il senso di questo macello:
- un blocco ha tanti items (o2m);
- un item ha 2 riferimenti: * appartiene a un blocco
* è di un certo tipo;
- una linea ha una tabella a parte ma si riferisce alle stesse due cose;
- un pacco ha tante linee (o2m) che nella view visualizzo come un tree incorporato.

Il problema è:
come faccio, all'inserimento di una line in questo tree, dopo aver selezionato il blocco di appartenenza (il primo domain funziona tranquillamente), a trovare nel menù a tendina del type solo i tipi degli items che appartengono a quel blocco?
Spero di essere stata chiara abbastanza.
Grazie in anticipo!
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Domain non trova un field... appena dichiarato 5 Anni 7 Mesi fa #12445

  • NicoTheBrush
  • Avatar di NicoTheBrush
  • Offline
  • Platinum Boarder
  • Messaggi: 1952
  • Ringraziamenti ricevuti 156
  • Karma: 46
Mi sono decisamente perso :), così a naso proverei ad utilizzare degli onchange quando sei nella visualizzazione form della tua vista, non so se sei al corrente ma si può ritornare anche il valore di domain da specificare ad altri campi del form (nelle viste tree invece non è possibile e i campi mostrerebbero le liste complete)
Se non ho capito male le relazioni, non credo tu possa fare: un domain del genere: [('id', 'in', block_id.items.type.id)] <<< items sono N oggetti non puoi saltare su type.id senza dire a quale oggetto ti riferisci (es.: items[0].type.id)
Puoi però fare delle valutazioni in codice python che ti permettano di creare la lista dei type.id dentro gli items che appartengono al blocco e ritornala per filtrare il tuo type:
# block_id viene passato dal metodo onchange e sarà quindi un int:
block_proxy=self.pool.('my.module.block').browse(cr, uid, block_id, context=context)
lista=[item.type.id for item in block_proxy.items]   
res{'domain': {'type': [('id','in',lista)]}}

... qualcosa del genere ...
Ultima modifica: 5 Anni 7 Mesi fa da NicoTheBrush.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Domain non trova un field... appena dichiarato 5 Anni 7 Mesi fa #12454

  • elena_the_witch
  • Avatar di elena_the_witch
  • Offline
  • Junior Boarder
  • Messaggi: 35
  • Karma: 0
grazie tante. proverò questa strada. forse ho supposto che le cose funzionassero diversamente.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

Domain non trova un field... appena dichiarato 5 Anni 6 Mesi fa #12803

  • elena_the_witch
  • Avatar di elena_the_witch
  • Offline
  • Junior Boarder
  • Messaggi: 35
  • Karma: 0
Ciao a tutti,
sono tornata a lavorare su questi dannati domain.
Ho provato a usare il domain facendolo restituire da una funzione onchange:
##########
def on_change_wp_id(self, cr, uid, ids, wp_id, context=None):
res = {}
warning = {}
domain = {}
if not isinstance(ids, (list, tuple)):
ids = [ids]

if self.pool.get('project.project').browse(cr, uid, [wp_id], context=context)[0].wp_name == '131':
domain.update({'pp': [('root', '=', True)]})
else:
domain.update({'pp': [('work_package', '=', False)]})

return {'value': res, 'warning': warning, 'domain': domain}
#############
la funzione onchange è collegata ad un campo many2one su una form definita sull'oggetto di interesse. Alla selezione del valore, testando con eclipse in modalità debug, la funzione viene richiamata, restituisce il domain corretto, ma, al momento di aprire l'elenco 'pp' (che è un campo many2one con la tabella dei progetti), è tutto inutile: quel domain non ha alcun effetto!!!!
Sto sbattendo da 2 giorni ma non trovo soluzione e non capisco perché, visto che i moduli standard lo usano tranquillamente.
Cosa sto sbagliando? HELP!!!!
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
Tempo creazione pagina: 0.149 secondi

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

Protected by R Antispam