Benvenuto!

Questo è il forum ufficiale dell'Associazione Odoo Italia. Dopo esserti registrato potrai partecipare ponendo domande o rispondendo a quelle esistenti. Non scordarti di compilare il tuo profilo e consultare le linee guida prima di iniziare a scrivere.

0

0
Alessandro Fiorino
Il 06/05/21, 05:05

In generale usando questo tipo di derivazione di classe c'è da tenere conto che poichè a tutti gli effetti viene generato un nuovo modello con una nuova tabella, eventuali campi Many2one che puntano alle nuove classi non sono compatibili.

Ovvero

field1=fields.Many2one(comodel_name='res.partner')

field2=fields.Many2one(comodel_name='heroes_villains.hero')

Anche se le due tabelle hanno la stessa struttura non puoi fare operazioni del tipo field1=field2 perchè field1 è una chiave esterna verso la tabella res_partner mentre field2 è una chiave esterna verso heroes_villains_hero

Derivando dalla res.partner saltano un sacco di meccanismi insiti nella classe perchè la tabella è autoreferenziante, la prima cosa che salta ad esempio è il meccanismo della "gerarchia" dei record perchè parent_id di res.partner è di tipo res.partner, quindi parent_id di heroes_villains_hero rimane un res.partner e da qui in poi non funzionano più un sacco di cose.

Saltano anche i campi calcolati: il campo same_vat_partner_id se vai a vedere il sorgente è calcolato effettuando una ricerca sulla 'res.partner', ecc...

Su modelli articolati la "clonazione" di classi a tutti gli effetti non dà gli effetti desiderati.

In questi casi si usano altri modelli di derivazione, nel caso della res.partner potresti anche solo sfruttare le categorie per differenziare gli "hero" dai "villain" senza nemmeno dover effettuare modifiche alla struttura.


 



La tua risposta


-1
sputnik63
Il 06/05/21, 14:34

Grazie Alessandro per la tua risposta tanto celere quano precisa e dettagliata.
Infatti la mia intenzione era quella di avere due modelli uguali alla res.partner ma contenenti gruppi diversi di elementi con qualche leggera differenza di campi tra i due.
Nei vari tutorial/manuali che ho letto non c'è menzione di tutto ciò e sembra che questo tipo di ereditarietà sia semplice ed indolore. Messa così direi che invece è quasi inutilizzabile, o sbaglio ?
Posso chiederti se anche la delegation inheritance porta con se questi problemi ?

Grazie

La tua risposta

0
Alessandro Fiorino
Il 06/05/21, 21:01

E' indolore su modelli più a sè stanti. Devo dire che questo tipo di ereditarietà non l'ho visto usare granchè.

La delegation inheritance ha anche lei qualche effetto collaterale, i primis NON eredita i metodi, perchè in realtà tu stai creando una classe nuova, che contiene al suo interno un campo con una chiave esterna verso la classe originaria. Praticamente quello che otterrai sarà una nuova tabella con un campo Many2one verso la tabella madre, ed ogni volta verrà fatta in automatico la join.
Forse potrebbe essere quella che fa per te, tenendo presente però che ogni volta che crei un "heroes_villains.hero" crei anche un res.partner, se vada bene o meno dipende dal tuo uso.
C'è da dire che se a te interessano solo pochi campi presente nella res.partner, forse fai prima a crearti i modelli ex-novo.


La tua risposta

Resta informato

Informazioni sulla comunità

Forum ufficiale dell'Associazione Odoo Italia Leggi le linee guida

Strumenti di richiesta

64 follower

Statistiche

Richiesta del: 05/05/21, 18:35
Vista: 70 volte
Ultimo aggiornamento: 06/05/21, 14:34