Finora abbiamo visto come estendere applicazioni esistenti aggiungendo funzionalità create da noi. Ma Odoo permette di fare molto di più: possiamo aggiungere funzionalità implementate in moduli scritti da altre persone.
Nel nostro caso vogliamo aggiugere la possibilità per gli utenti di commentare i task e di poterli seguire, alla maniera di Twitter. Questa funzionalità in Odoo è implementata nel modulo mail, più specificatamente nel modello mail.thread di quel modulo.
Per aggiungerlo al nostro modello todo.task dobbiamo procede in questo modo:
Apriamo il nostro file di manfiesto e modifichiamolo come segue:
{
'name': 'Multiuser TODO',
'description': 'Extend Todo app to work in a multiuser environment',
'author': 'Imthe Author',
'license': 'LGPL-3',
'depends': [
'todo_app',
'mail' # <-- Add this line
],
'data': [
'views/task_views.xml'
]
}
Per aggiungere la classe al modello procediamo nella stessa maniera con cui abbiamo ereditato il modello esteso dal modello base. Andiamo ad aggiungere all’attributo _inherit il modello mail.thread
Apriamo il nostro file models/task_task.py
class TodoTask(models.Model):
_name = 'todo.task'
_inherit = ['todo.task', 'mail.thread']
Con questa semplice modifica il nostro modello thread acquisterà tutta la logica che gli serve per far funzionare la messaggistica. C’è anche da notare che mettendo due dipendenze siamo obbligati anche a specificare quale deve essere il nome del modello principale da cui ereditiamo, per questo aggiungiamo ancche l’attributo _name.
Il modello mail.thread è un Abstract Class, che significa che non ha una tabella sua di riferimento. Può essere ssolo utiilizzato in altri modelli e va a estendere le loro funzionalità. Quindi, nella pratica, aggiungendolo andrà a modificare direttamente la tabella originale e aggiungerà al modello i metodi necessari alle sue funzionalità. Per maggiori infomazioni consultate la documentazione ufficiale di Odoo.
A questo punto non ci rimane che aggiungere il widget delle funzionalità mail al fondo della nostra Form View del modello. Apriamo il file views/task_task.xml e aggiungiamo nell’attributo arch questo codice XML
<sheet position="after">
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</sheet>
Se ci fate caso i due campi message_followers_ids e message_ids non sono stati implementati esplicitamente da noi ma vengono ereditati dalla classe mail.thread.
A questo punto non ci resta che effettuare l’upgrade del nostro modello
$ docker compose run odoo upgrade todo_user
ricaricare la pagina e cominciare ad aggiungere commenti
Il nostro upgrade del modulo base è finito, a questo punto possiamo andare a guardare più nel dettaglio cosa ci offre il framework Odoo. Cominciamo ad analizzare i Modelli