Odoo Chatter-Nachrichten aus deinem eigenen Modul schreiben – so geht’s wirklich

Hey, stell dir vor: Du bastelst an deinem eigenen Odoo-Modul und willst plötzlich, dass irgendwo eine Nachricht im Chatter auftaucht. Nicht manuell über die UI, sondern direkt aus deinem Python-Code. Kennst du das Gefühl, wenn du ewig suchst und dann feststellst – ach, eigentlich ist es total simpel? Genau das passiert mir jedes Mal bei message_post.

Die magische message_post-Methode

Die Methode, die alles kann, heißt message_post. Sie hängt an jedem Record, der mail.thread erbt. Ein kleines Beispiel aus dem echten Leben:

1
2
3
4
5
6
7
8
self.message_post(
    body="Der Auftrag wurde gerade freigegeben – juhu!",
    subject="Auftrag freigegeben",
    author_id=self.env.ref('base.partner_root').id # zum setzen des Autors
    message_type="notification",  # oder "comment"
    subtype_xmlid="mail.mt_note",  # oder "mail.mt_comment" für @mentions
    partner_ids=[some_partner.id],  # damit jemand benachrichtigt wird
)

Fertig. Die Nachricht landet sofort im Chatter, mit Avatar, Zeitstempel, allem Drum und Dran. Ehrlich gesagt, ich nutze das ständig in Wizards, Scheduler-Jobs oder bei automatischen Statuswechseln. Plötzlich fühlt sich dein Custom-Modul wie ein echter Teil von Odoo an.

Wenn deine Modelle noch keinen Chatter haben

Manchmal erbst du ein Modul von Odoo, und das Model hat weder Chatter noch Aktivitäten. Null. Nada. Niente. Dann machst du einfach:

1
2
3
4
5
from odoo import models

class MyShinyModel(models.Model):
    _name = 'my.shiny.model'
    _inherit = ['my.shiny.model', 'mail.thread', 'mail.activity.mixin']

Boom – ab sofort kannst du message_post benutzen und hast auch das Aktivitäten-Feature dabei. Beides wird gebraucht, damit der Chatter später auch im UI angezeigt werden kann.

Das Chatter-Widget rechts im Formular anzeigen

Jetzt der Teil, der viele nervt: Du hast alles technisch korrekt, aber im Formular siehst du… nichts. Kein Chatter rechts. Die Lösung ist lächerlich kurz:

1
2
3
4
5
6
7
8
9
<record id="view_my_shiny_model_form" model="ir.ui.view">
    <field name="name">my.shiny.model.form</field>
    <field name="model">my.shiny.model</field>
    <field name='arch' type='xml'>
        <xpath expr='//form/sheet' position='after'>
            <chatter/>
        </xpath>
    </field>
</record>

Kleiner Bonus-Tipp aus der Praxis

Wenn du message_post in einer create oder write-Override aufrufst, pass auf Kontext-Schleifen auf. Manchmal triggert die Nachricht wieder eine write-Methode – dann hast du plötzlich Endlosschleifen. Einfach self.with_context(mail_create_nosubscribe=True) oder mail_notrack=True dazupacken, und alles bleibt ruhig.

So, jetzt hast du wirklich alles, was du brauchst, um aus jedem noch so obskuren Custom-Modul Chatter-Nachrichten rauszufeuern und sie auch schön anzuzeigen. Probier’s direkt aus – und erzähl mir gerne, wo du’s eingebaut hast. Ich bin gespannt!