跳至内容

深入解析 Odoo 的 blog.post 模型与文章架构

面向开发者与实施顾问的 Odoo blog.post 模型全解析 — 从架构到实战要点
2026年3月11日
深入解析 Odoo 的 blog.post 模型与文章架构
Dasolo
| 还没有评论

简介:掌握 Odoo 博客数据模型的要点


在 Odoo 中,模型就是数据库里保存业务数据的蓝图。每条你在后台编辑或前端展示的业务信息,最终都会存到某个模型里,模型决定了数据的字段、关系和存取方式。


模型构成了 Odoo 的数据骨架:字段定义、关联关系和业务规则都在模型层实现。无论是业务顾问为业务流程建模,还是开发者编写扩展,理解模型行为都是必备技能。


本文以 blog.post 为例讲解:这是 Odoo 网站模块中负责文章内容的核心模型。无论你是在后台撰写文章、通过 API 批量导入内容,还是对博客功能做定制化改造,都会与该模型打交道。

什么是 blog.post 模型


blog.post 在 Odoo 中对应一篇完整的博客文章。每条记录就是网站上可见或草稿状态的一篇帖子。


该模型属于 website_blog 应用体系,与 blog.blog(博客容器)和 blog.tag(标签)协同工作。后台新增或编辑文章,实际上是在创建或修改 blog.post 记录并与其所属 blog 关联。


blog.post 继承了若干通用能力:例如 mail.thread 提供了讨论与关注者功能,website.published.mixin 负责发布/下线逻辑。理解这些继承关系有助于安全地扩展或覆写功能。


blog.post 不是抽象模型或临时模型,而是常规的持久化模型。发布的文章会存入数据库,可通过 API 查询、筛选与更新。

模型中的重要字段速览


下面列出 blog.post 中你最常用、最关键的字段。熟悉它们能让你更高效地创建、优化和集成内容。


1. 标题(name)

字段类型:Char。文章的主标题,必填。标题不仅在后台列表和页面中显示,也是浏览器标签与搜索结果里最先被看到的文本,对阅读吸引力和 SEO 都至关重要。


2. 所属博客(blog_id)

字段类型:Many2one(blog.blog)。将文章归入某个博客栏目。每篇文章隶属于一个 blog,用于把内容按栏目分组(例如 新闻、产品更新、技术文档),便于访客按主题浏览。


3. 副标题(subtitle)

字段类型:Char。短句型的副标题或标签句,通常显示在主标题下方,有助于增强可读性,并为搜索结果提供补充信息。


4. 正文(content)

字段类型:Html。文章的主体,支持富文本、图片和网站片段。这里保存的是最终在页面上渲染的 HTML 内容,是文章的核心字段。


5. 自动摘要(teaser)

字段类型:Text。系统根据正文自动生成的摘要片段,用于列表页预览。该字段为只读并按规则计算,方便快速展示。


6. 手动摘要(teaser_manual)

字段类型:Text。用于覆盖自动生成的摘要。当需要自定义列表预览或强调不同开头时,填写此字段可提升页面表现与 CTR。


7. 作者(author_id)

字段类型:Many2one(res.partner)。指向联系人或用户的作者信息,便于多作者协作并在文章页与列表中展示作者资料。


8. 作者显示名(author_name)

字段类型:Char。计算字段,根据 author_id 回退到对应的显示名称,通常为只读,用于前端展示。


9. 作者头像(author_avatar)

字段类型:Binary。存放作者头像图片,选配字段,常用于增强作者栏的视觉效果。


10. 是否已发布(is_published)

字段类型:Boolean。只读计算字段,表示文章当前是否对外可见。实际写入与控制请通过 website_published 字段操作。


11. 网站发布标志(website_published)

字段类型:Boolean。可写字段,用来将文章设为发布或草稿。设置为 True 则文章上线,False 则保持草稿状态;该字段驱动 is_published 的计算。


12. 计划发布时间(post_date)

字段类型:Datetime。文章在页面上显示的发布时间,用于排序与展示。可以设置为未来时间以实现定时发布。


13. 实际发布时间(published_date)

字段类型:Datetime。记录文章真正上架的时间,系统在 website_published 由 False→True 时自动写入,便于统计与分析。


14. 激活状态(active)

字段类型:Boolean。软删除标记。设为 False 后记录被归档并从默认视图中隐藏,但数据仍保留以便审计或恢复。


15. 标签(tag_ids)

字段类型:Many2many(blog.tag)。用于给文章打标签,便于筛选、聚合与内容分类。标签还可支持分级或类别化管理。


16. 访问量(visits)

字段类型:Integer。只读的浏览计数器,访问时递增,用于判断热门内容与优化推荐。


17. 页面路径(website_url)

字段类型:Char。文章在网站上的完整 URL 路径,只读。典型格式带有 blog 与 post 的 SEO 名和 ID,便于前端路由。


18. 封面设置(cover_properties)

字段类型:Text。以 JSON 字符串形式存储封面图的定位、遮罩与显示属性,前端据此渲染封面效果。


19. 是否显示页头(header_visible)

字段类型:Boolean。控制文章页面是否展示网站头部,常用于需要沉浸式或嵌入式展示的页面。


20. 是否显示页脚(footer_visible)

字段类型:Boolean。控制是否显示网站页脚,常与 header_visible 配合使用,影响页面整体布局。


21. SEO 别名(seo_name)

字段类型:Char。用于生成 SEO 友好的 URL 段。若留空系统会基于标题自动生成;为重要文章手动设置能提升可读性与传播效果。


22. 页面 meta 标题(website_meta_title)

字段类型:Char。供搜索引擎和浏览器标签使用的标题字段,对 SEO 排名和点击率有直接影响。


23. 页面 meta 描述(website_meta_description)

字段类型:Text。搜索结果摘要的来源文本,建议控制在 150–160 字符以内,以保证在搜索页中呈现完整信息。


24. meta 关键词(website_meta_keywords)

字段类型:Char。传统的关键词字段,当前搜索引擎权重不高,但在某些系统或内部检索场景仍有参考价值。


25. 创建时间(create_date)

字段类型:Datetime。记录创建时间,由 Odoo 自动维护,常用于报表与审计。


26. 创建者(create_uid)

字段类型:Many2one(res.users)。记录谁创建了该记录,系统自动设置,通常为只读。


27. 最后修改时间(write_date)

字段类型:Datetime。记录最后一次修改时间,便于追踪内容更新历史。


28. 最后修改人(write_uid)

字段类型:Many2one(res.users)。指向最后修改该记录的用户,常用于审计与责任追踪。


29. 显示名称(display_name)

字段类型:Char。计算字段,在下拉选择和搜索结果中常被引用,便于快速识别记录。


30. 所属网站(website_id)

字段类型:Many2one(website)。用于多站点部署时指定文章归属的网站;若留空,文章可能在所有站点通用或由前端逻辑决定可见性。

这个模型在业务流程中的实际用途


内容营销与 SEO:让每篇文章都服务增长

市场与内容团队会在 blog.post 中创建文章并填充 website_meta_title、website_meta_description、seo_name 等 SEO 字段来提升检索能见度。正文内容储存在 content,标签(tag_ids)帮助按主题聚合与筛选,进而支持内容策略和流量转化。


多博客站点的内容组织模式

许多企业会同时维护多个博客栏目(比如:新闻、产品更新、技术文档)。每个 blog.blog 下可以包含大量 blog.post,blog_id 将文章归档到对应栏目,访客可以按栏目浏览或用标签进行筛选。


API 驱动的内容同步场景

通过 XML-RPC 或 JSON-RPC 接口可以批量创建或同步 blog.post 记录。常见场景包括从其他 CMS 导入、将 Headless 博客同步进 Odoo,或自动把内部系统生成的内容发布到网站。Odoo 的 API 允许对 blog.post 执行 create/read/write/search 等操作。


定时发布与内容日历

将 post_date 设为未来时间并把 website_published 置为 True,可实现定时上架。该机制适合配合营销日历开展活动或同步全球发布节奏。


多人协作与审阅流程

借助 author_id 和 mail.thread 的讨论功能,可以为每篇文章分配作者、追踪变更并让关注者接收通知。后台的 chatter 能支持编辑前的内部评论与审阅流程,提升内容质量控制。

开发者如何扩展 blog.post


开发者扩展 blog.post 的常用方式


模型继承是最核心的手段。通过继承你可以新增字段、覆写方法或添加约束,同时保持自定义在独立模块中以便升级维护。理解 blog.post 继承的 mixin(如 mail.thread、website.published.mixin)在覆写时尤其关键。

模型继承示例与注意点


在自定义模块中使用 _inherit = 'blog.post' 来扩展原模型。可以增加字段、改写业务方法或加上约束。推荐把变更放在单独模块内,便于后续升级和回滚。覆写时要留意父类逻辑的调用与 mixin 的计算字段。

新增字段的实践建议


在继承模型里定义新字段时请选择合适的字段类型(Char、Many2one、Boolean、Integer、Text、Selection 等)。如果要记录自定义元数据(例如:阅读时长、内部分类),建议使用 x_ 前缀命名以避免和社区字段冲突,并在视图层将其暴露给编辑者。

在 Python 层扩展业务逻辑


如需在创建、更新或删除时加入业务逻辑,可覆写 create、write、unlink 等方法,并在调用原实现时使用 super()。注意不要忽视与 website_published、post_date 等计算字段的交互,必要时也可覆写 _compute_website_url 实现自定义 URL 生成。

使用 Odoo Studio 做快速定制

最佳实践清单(内容与技术)


  • Odoo Studio 可以在不写代码的情况下添加字段或调整视图,适合快速原型或简单元数据扩展。但遇到复杂逻辑、跨系统集成或需要持久化的 API 行为时,还是建议通过标准模块开发以保持可维护性与版本兼容。
  • 为每篇文章填好 meta 标题和描述,提升搜索排名与点击率。
  • 当自动摘要不合适时,使用 teaser_manual 自定义列表预览,通常比系统截取的摘要表现更好。
  • 对重要文章手动设置 seo_name,避免特殊字符或过长文本;这样可以生成更友好的 URL 便于传播与分享。
  • 通过 API 发布文章时,写入 website_published 而非 is_published;is_published 是只读计算字段,只有 website_published 才能改变发布状态。

常见错误与避坑指南


  • 统一使用 tag_ids 进行标签管理。事先建立并复用标签能保证分类一致性并简化前端筛选逻辑。
  • 不要直接写入 is_published,因为它是只读的。请始终通过 website_published 控制发布状态。
  • 确保为文章设置 blog_id,因为它是必需的。缺少所属博客会导致文章无法正确展示或路由异常。
  • 切勿忽略 website_meta_description。若为空,搜索引擎可能随机截取页面内容作为摘要,影响点击率。建议提供清晰且长度适中的描述。
  • 在覆写核心方法时务必调用 super(),否则可能破坏 website mixin 或 mail.thread 的功能,带来不可预期的问题。

总结:为什么要重视 blog.post


避免在同一博客下产生重复的 seo_name,URL 冲突会影响路由与 SEO。可以让 Odoo 自动处理或在生成策略中保证唯一性。


总结:blog.post 是 Odoo 网站博客功能的核心,它保存了文章内容、元数据和发布状态。掌握其字段含义、继承关系以及与 blog.blog、blog.tag 的关联,对配置、定制与系统集成都非常重要。

需要 Odoo 实施支持吗?联系我们


无论你是负责内容运营的顾问,还是构建集成与自动化的开发者,精通 blog.post 都能节省大量时间并降低实施风险。


Dasolo 提供 Odoo 实施、开发与 API 集成服务。我们在 Odoo 数据架构及常用模型(如 blog.post)方面有丰富实战经验,可协助企业快速落地并优化网站内容管理流程。 需要我们展示解决方案并讨论具体需求吗?安排演示会帮你评估下一步的实施计划。 预约演示,与我们详谈你的项目需求。

深入解析 Odoo 的 blog.post 模型与文章架构
Dasolo 2026年3月11日
分析这篇文章
登录 留下评论