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: many2one duplice

many2one duplice 1 Anno 5 Mesi fa #29322

  • ndrini
  • Avatar di ndrini
  • Offline
  • Gold Boarder
  • Messaggi: 291
  • Ringraziamenti ricevuti 22
  • Karma: 0
Vedo che sono state riorganizzate le categorie del forum: spero di aver centrato quella giusta.


La domanda è su one2many (o la sua controfaccia: many2one)

Ho, ad esempio, questa relazione fra abbonamenti e ordini di vendita:
_name = "sale.order"
project_id = fields.many2one('account.analytic.account', 'Contract / Analytic', readonly=True,...),

_name = "account.analytic.account"
sale_order_ids = fields.One2many('sale.order', 'project_id')

Non mi è chiaro perchè nel One2many debba specificare il campo del sale.order.

L'unica ragione che mi viene in mente è che sale.order possa essere collegato agli abbonamenti con vari many2one.
Ha senso quello che dico?
Potrei avere un

project_id = fields.many2one('account.analytic.account', ..)
project_id_2 = fields.many2one('account.analytic.account', ..)) ?

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

many2one duplice 1 Anno 5 Mesi fa #29324

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
:goodjob:

Per chi, come me, doveva gestire le relazioni con il codice è chiaro.
Esempio: relazione testata - dettagli ordine
Una testata ha zero, una o più righe di dettaglio. Quindi in testata non puoi vare un reale campo nel DB
Un dettaglio appartiene sempre e soltanto ad una sola testata: quindi DEVI avere un campo con l'id della testata

NB Il campo ids che vedi in python è un campo virtuale che non esiste realmente nel DB. In realta è un iteratore python che richiama una select SQL passando l'id corrente.
Nell'esempio di cui ids eseguirebbe: SELECT * FROM DETTAGLI WHERE ID=ID_TESTATA;

Spero di essere stato sufficientemente chiaro
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. - Presidente eletto dell'associazione
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

many2one duplice 1 Anno 5 Mesi fa #29326

  • gigidn
  • Avatar di gigidn
  • Offline
  • Platinum Boarder
  • Messaggi: 1925
  • Ringraziamenti ricevuti 446
  • Karma: 22
Se nello stesso oggetto ripeti piu' volte la relazione come fai a distingue quelli che appartengono ad un tipo e quelle che appartengono ad un altro?

ES:

contratti_scaduti_ids
contratti_in_essere_ids

Ambedue i fileds puntano allo stesso oggetto account.analytic ma quali si riferiscono al primo field e quali al secondo? ecco il motivo di specificare anche il discriminante.

Se ho capito bene la domanda :D
@KTec
www.ktec.it
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

many2one duplice 1 Anno 5 Mesi fa #29328

  • ndrini
  • Avatar di ndrini
  • Offline
  • Gold Boarder
  • Messaggi: 291
  • Ringraziamenti ricevuti 22
  • Karma: 0
gigidn ha scritto:
Se nello stesso oggetto ripeti più volte la relazione come fai a distingue quelli che appartengono ad un tipo e quelle che appartengono ad un altro?

ES:
contratti_scaduti_ids
contratti_in_essere_ids

Ambedue i fileds puntano allo stesso oggetto account.analytic ma quali si riferiscono al primo field e quali al secondo? ecco il motivo di specificare anche il discriminante.

Quindi la risposta è sì, posso avere due campi che puntano allo stesso oggetto!
:woohoo:

Avete sotto mano un esempio del codice reale in cui questo avviene?
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

many2one duplice 1 Anno 5 Mesi fa #29329

  • ndrini
  • Avatar di ndrini
  • Offline
  • Gold Boarder
  • Messaggi: 291
  • Ringraziamenti ricevuti 22
  • Karma: 0
Antoniov ha scritto:
Esempio: relazione testata - dettagli ordine
Una testata ha zero, una o più righe di dettaglio.
Quindi in testata non puoi avere un reale campo nel DB
Un dettaglio appartiene sempre e soltanto ad una sola testata: quindi DEVI avere un campo con l'id della testata


Testata
  • id ... integer
  • descrizione ... char
  • dettaglio one2many ("dettaglio")

dettaglio
  • id ... integer
  • testata many2one ("testata", "dettaglio" ...)
  • prodotto ....
  • prezzo float


Antonio mi stai dicendo che mentre il campo dettaglio.testata contiene un id (l'id della testata a cui si riferisce),
il campo testata.dettaglio non è una lista di id (come potevo immaginarmi), ma in realtà è un campo campo virtuale che nasconde una query nel database.
Questa
SELECT * FROM DETTAGLI WHERE ID=ID_TESTATA;

Giusto?
Ultima modifica: 1 Anno 5 Mesi fa da ndrini.
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.

many2one duplice 1 Anno 5 Mesi fa #29330

  • Antoniov
  • Avatar di Antoniov
  • Online
  • Administrator
  • Messaggi: 1555
  • Ringraziamenti ricevuti 283
  • Karma: -115
Esatto,
se usi una console sql o un accesso web tipo webmin o phpadmin non troverai nella tabella del DB i campi ids (nel nostro esempio il campo testata.dettaglio)
Inoltre se imposti un breakpoint nel codice e fai il print del campo non vedrai la lista degli id come potresti immaginare ma vedrai un iteratore python

Per maggior info sugli iteratori
docs.python.org/2.7/howto/functional.htm...t=iterator#iterators
Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. - Presidente eletto dell'associazione
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: ndrini
  • Pagina:
  • 1
  • 2
Tempo creazione pagina: 0.140 secondi

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

Protected by R Antispam