Intro — waarom het blog.post-model telt
In Odoo bepaalt een model hoe gegevens worden georganiseerd en bewaard. Alles wat met je zakelijke content te maken heeft, leeft in een model: titels, auteurs, publicatiedata en meer.
Modellen vormen het hart van Odoo’s datalaag. Ze definiëren velden, relaties en logica. Zowel technisch als functioneel inzicht in modellen maakt werken met Odoo veel efficiënter.
Deze tekst zoomt in op het blog.post-model: de structuur achter blogartikels op Odoo-websites. Of je nu in de backoffice publiceert, content via de API toevoegt of het blog uiterlijk aanpast, je komt dit model vaak tegen.
Wat het blog.post-model doet
Een blog.post staat voor één artikel op je website: één record = één gepubliceerde (of concept) blogpost.
Het model hoort thuis in de website_blog-module en werkt samen met blog.blog (de blogcontainer) en blog.tag (categorisering). Wanneer je een artikel aanmaakt of wijzigt in Odoo, pas je een blog.post-record aan.
blog.post gebruikt verschillende mixins: bijvoorbeeld mail.thread voor de chatter en website.published.mixin voor publicatiebeheer. Die ervingsmechanieken verklaren veel van het gedrag van het model en zijn belangrijk bij uitbreidingen.
blog.post is een regulier, opgeslagen model (geen transient of abstract). Posts blijven in de database aanwezig en zijn via de API opvraagbaar.
Belangrijkste velden in het model
Onderstaande velden zijn de kern waarmee je het meeste zult werken bij contentmanagement en integraties.
1. name
Type: Char. Dit is de titel van de post — zichtbaar in lijsten, formulieren en in de browser. Verplicht en vaak ook bepalend voor de eerste indruk en SEO.
2. blog_id
Type: Many2one (blog.blog). Verbindt een post met zijn blogcontainer. Gebruik dit om posts te clusteren (bijv. Nieuws, Productupdates, Handleidingen).
3. subtitle
Type: Char. Korte ondertitel of accroche onder de hoofdtitle — draagt bij aan leesbaarheid en vindbaarheid.
4. content
Type: Html. De volledige artikeltekst met rich content: opmaak, afbeeldingen en website-snippets. Dit is het hoofdveld voor je verhaal.
5. teaser
Type: Text. Automatisch gegenereerde preview uit de content. Wordt gebruikt in blogoverzichten; berekend en alleen-lezen.
6. teaser_manual
Type: Text. Handmatige samenvatting die de automatische teaser overschrijft. Handig wanneer je een specifieker intro wilt tonen.
7. author_id
Type: Many2one (res.partner). Koppeling naar de auteur (contact of gebruiker). Nuttig voor multi-auteurblogs en weergave op de post.
8. author_name
Type: Char. Berekenbare weergavenaam van de auteur; valt terug op author_id wanneer beschikbaar.
9. author_avatar
Type: Binary. Profielfoto van de auteur; optioneel maar waardevol voor herkenbaarheid.
10. is_published
Type: Boolean. Geeft aan of een post (zichtbaar) gepubliceerd is. Dit veld is berekend en alleen-lezen; wijzig via website_published.
11. website_published
Type: Boolean. Schakelaar om te publiceren of op concept te zetten. Dit is het veld waarmee je posts live zet of terugtrekt.
12. post_date
Type: Datetime. De geplande publicatiedatum die bezoekers zien; handig voor sortering en geplande publicaties.
13. published_date
Type: Datetime. De feitelijke publicatiedatum; wordt automatisch gezet zodra website_published True wordt.
14. active
Type: Boolean. Archiveringsvlag: op False wordt de record verborgen zonder ze fysiek te verwijderen — handig voor historiek.
15. tag_ids
Type: Many2many (blog.tag). Tags ter categorisatie en filteren; kunnen ook hiërarchisch georganiseerd worden.
16. visits
Type: Integer. Bezoekers-teller; wordt automatisch verhoogd bij views en gebruikt voor populaire-content-statistieken.
17. website_url
Type: Char. Volledige URL naar de post op de website; alleen-lezen. Vormgeving: /blog/{blog-seo-naam}-{blog-id}/{post-seo-naam}-{post-id}.
18. cover_properties
Type: Text. JSON met instellingen voor coverbeeld (positie, overlay, weergave) die de frontend gebruikt.
19. header_visible
Type: Boolean. Bepaalt of de standaard website-header zichtbaar is op de postpagina — handig voor full-width ontwerpen.
20. footer_visible
Type: Boolean. Bepaalt of de footer getoond wordt; vaak samen gebruikt met header_visible.
21. seo_name
Type: Char. SEO-vriendelijke slug die de URL bepaalt. Wordt automatisch gegenereerd vanuit name indien leeg.
22. website_meta_title
Type: Char. Meta-titel voor zoekmachines — essentieel voor zichtbaarheid en click-through in zoekresultaten.
23. website_meta_description
Type: Text. Meta-omschrijving die in zoekresultaten verschijnt; houd deze rond 150–160 tekens voor optimale weergave.
24. website_meta_keywords
Type: Char. Meta-keywords; minder relevant voor moderne SEO maar soms nog in gebruik.
25. create_date
Type: Datetime. Datum van aanmaak — automatisch afgehandeld door Odoo, nuttig voor rapportage.
26. create_uid
Type: Many2one (res.users). Gebruiker die het record aanmaakte; automatisch gezet.
27. write_date
Type: Datetime. Datum van laatste wijziging — helpt bij contentbeheer en audits.
28. write_uid
Type: Many2one (res.users). Wie de laatste wijziging deed; alleen-lezen.
29. display_name
Type: Char. Berekende weergavenaam gebruikt in dropdowns en zoekresultaten.
30. website_id
Type: Many2one (website). Bij multi-site setups specificeert dit op welke website de post hoort te verschijnen; leeg betekent vaak: overal zichtbaar.
Hoe bedrijven het model gebruiken in hun processen
1. Contentmarketing en SEO
Marketingteams vullen blog.post-records met artikelen en optimaliseren metadata (website_meta_title, website_meta_description, seo_name) voor zoekmachines. Tags en content structureren topics en verbeteren vindbaarheid.
2. Meerdere blogs op één site
Organisaties houden verschillende blogs bij (bv. Nieuws, Productnieuws, Technische Documentatie). blog_id groepeert posts per blog zodat bezoekers makkelijk per onderwerp navigeren.
3. Content via API
Externe systemen of CMS’en publiceren via XML-RPC/JSON-RPC rechtstreeks naar blog.post. Handig voor migraties, headless setups of geautomatiseerde contentflows; Odoo biedt create/read/update/search endpoints voor het model.
4. Geplande publicaties
Wil je straks automatisch publiceren? Stel post_date in op een toekomstige datum en zet website_published op True; Odoo toont de post zodra de datum bereikt is.
5. Meerdere auteurs en samenwerking
Dankzij author_id en mail.thread kunnen teams samenwerken: auteurs toegewezen per post, volgers ontvangen updates en de chatter faciliteert interne feedback voor publicatie.
Hoe ontwikkelaars het model uitbreiden
Ontwikkelaars breiden blog.post uit via gangbare Odoo-patronen, waarbij model-erfenis centraal staat.
Modelerfenis
Gebruik _inherit = 'blog.post' in je module om velden of methoden toe te voegen of te overschrijven. Bewaar uitbreidingen in aparte modules voor eenvoudiger onderhoud en updates. Let op de mixins (mail.thread, website.published.mixin) wanneer je gedrag verandert.
Velden toevoegen
Voeg extra Odoo-velden toe in je geërfde klasse wanneer je extra metadata nodig hebt (bv. leestijd, custom categorieën). Gebruik passende veldtypes en het x_-prefix voor custom velden om conflicten te vermijden.
Python-uitbreidingen
Overschrijf create, write of unlink om logica toe te voegen, maar roep altijd super() aan. Wees voorzichtig met velden als website_published en post_date; sommige velden worden berekend door mixins en vereisen specifieke hooks (bv. _compute_website_url voor aangepaste URL-logica).
Odoo Studio
Odoo Studio is ideaal voor snelle, code-vrije aanpassingen zoals extra velden of eenvoudige views. Voor complexe logica, API-koppelingen of onderhoudbare aanpassingen blijft een eigen module de beste optie.
Aanbevolen werkwijzen
- Zorg dat elke post een duidelijke website_meta_title en website_meta_description heeft — dit verhoogt de SEO-kansen.
- Gebruik teaser_manual wanneer de automatische samenvatting niet overtuigt. Handmatige teasers scoren vaak beter qua click-through.
- Stel seo_name expliciet in voor belangrijke posts en vermijd speciale tekens die URL’s kunnen breken.
- Bij API-integraties: wijzig website_published om te publiceren. Verlaat je niet op is_published voor schrijfbewerkingen, want dat is alleen-lezen.
- Gebruik tag_ids consequent: creëer en hergebruik tags om consistente categorisatie en betere filtering mogelijk te maken.
Veelvoorkomende fouten
- Schrijf niet naar is_published — dat veld is berekend. Werk met website_published om publicatiestatus te beheren.
- Vergeet blog_id niet in te vullen; het is essentieel. Zonder blog-koppeling kunnen posts verkeerd of niet weergegeven worden.
- Laat website_meta_description niet leeg. Zoekmachines kunnen anders willekeurige tekst kiezen; voorzie altijd een duidelijke omschrijving van 150–160 tekens.
- Overschrijf nooit kernmethodes zonder super() aan te roepen — dit kan mixin-functionaliteit zoals de website-publicatie of chatter breken.
- Voorkom dubbele seo_name-waarden binnen dezelfde blog; dat veroorzaakt URL-conflicten. Laat Odoo auto-genereren of garandeer zelf uniciteit.
Samenvatting
Het blog.post-model zit centraal in Odoo’s blogfunctionaliteit: het bewaart artikelen, content, metadata en publicatie-informatie. Kennis van de velden en relaties (blog.blog, blog.tag) maakt configuratie en integratie veel eenvoudiger.
Of je nu inhoud beheert als consultant of koppelingen bouwt als developer: een goed begrip van blog.post voorkomt veel tijdverlies en fouten.
Hulp nodig bij je Odoo-implementatie?
Dasolo ondersteunt bedrijven bij het implementeren, aanpassen en optimaliseren van Odoo. We hebben veel ervaring met API-integraties en de onderliggende datamodellen zoals blog.post.
Heb je hulp nodig bij je Odoo-implementatie, maatwerkmodulen of integraties? We helpen je graag verder. Plan een demo om je project te bespreken.