《Odoo 19 开发教材》习题参考答案
用途:供 教师备课、学员自测对照;建议 单独装订或与正文分册,避免课堂直接发全文。
范围:各章 「本章综合练习」 的参考要点;各节 「本节练习」 若正文已附 「参考答案提示」,本册 不重复,请对照01~49、99正文。
说明:实操题、拓展阅读题 因环境与版本差异,答案以 思路与检查点 为主;代码需结合当前 Odoo 源码与官方文档核对。
第一章 —— 概念总论
- 示意图:自顶向下:用户点击菜单 →
ir.ui.menu(解析action)→ir.actions.act_window(res_model、view_mode、context、domain)→ WebClient 请求load_views/search_read→models.Model与ir.ui.view的 arch 合成界面。数据回写走call_kw(write/create) 回到模型。 - 三项:ACL/记录规则(列表隐藏≠不能 RPC)、服务端逻辑(
create绕过只读视图)、文件/报表下载、Controller 自定义路由 等;仅invisible不触及上述层。 - 拓展:按当前 ORM Changelog 摘录一条,例如
record._cr→record.env.cr或_search_display_name相关说明。
第二章 —— 模型
training.session(Transient):TransientModel,字段如course_ids(Many2many 或 line),按钮调用training.course.create([...])或create多字典;注意 Transient 自动清理,不宜存长期业务。store=True计算字段:利:搜索、排序、列表聚合、避免重复计算;弊:占磁盘、写放大、@api.depends漏依赖导致脏数据、升级迁移成本。
第三章 —— 字段类型
library.loan:book_idMany2oneondelete='restrict'(书被删时禁止或需业务处理);user_idrequired=True;planned_return_dateDate;book_id常index=True。related:当值 完全由另一路径字段导出、无额外业务逻辑 时用related;若需 复杂条件、聚合、默认值 用compute。
第四章 —— ORM 核心操作
merge_partners(思路):备份 → 选 主 partner →write子表外键(sale.order、account.move等)改partner_id→ 重复地址/标签合并 →unlink被合并方;生产需 事务、幂等、日志;更稳妥可用 官方/OCA merge 工具模式。sudovswith_user:sudo以 超级用户 绕过规则,审计难;with_user(user)以 指定用户权限 执行,利于合规;敏感集成用 专用技术用户 + 显式with_user,并 记录message_post/ 自定义日志。
第五章 —— 小部件
- 表单:
statewidget="statusbar",coverwidget="image"(Binary);列表sequence+widget="handle"。 - M2M 颜色:comodel 加
colorInteger(0–11 等),视图color_field="color"(看板/标签 widget 以版本为准)。 - Legacy → OWL:Registry 注册、props/record 契约、资产声明、去掉
Widget.extend、补测试、查官方字段组件范例。 sum局限:列表sum常只对 当前页/当前结果集;全表合计 需read_group、SQL、会计报表 等 服务端聚合。
第六章 —— 交叉引用
- 三种:跨库/跨环境 id 不同;模块卸载重装 id 变;数据迁移 后整数 id 不稳定——必须用 XML ID /
ref。 - 菜单消失:查
ir.model.data是否存在该menuitemid;ir.ui.menuactive;groups_id;父菜单是否被删;依赖模块未装;升级时视图/XML 报错 导致事务回滚。 - 两模块同父菜单:共同依赖 定义父菜单的模块;
sequence固定顺序;避免 两模块 互相 depends 成环。 - 生产:勿加载 demo;
demo数据不入生产;data与noupdate策略 需评审。
第七章 —— 安全性
- STRIDE 示例:欺骗→密码+2FA;越权→ACL+规则+
check_access;信息泄露→字段groups、导出审计、日志脱敏。 - 无
createACL:ORM 应 拒绝create;用HttpCase/ RPCassertRaises(AccessError)验证 不可创建。 - 读者/管理员:组 Portal/User vs Manager;ACL 读者 读自己的 loan;规则
domain(user_id','=',uid)或 关联 partner;管理员 宽规则或单独组。 - 拓展:记录 测试用
with_user、勿默认 admin 断言安全 等官方表述。
第八章 —— 视图
- 四套视图 +
act_window:list、form、search、kanban的ir.ui.view+ir.actions.act_window指定view_mode与 xml id。 - 双继承:两模块
inherit_id同父视图,设不同priority(整数);数值小的优先(以文档为准)——升级后 对比表单字段序。 - 10 万条:视图层 分页、limit、不默认全表;ORM
search带 limit、索引;DB EXPLAIN、禁止无 domain 全表 scan。 - Checklist 示例:xpath 唯一锚点;移动端 可编辑列表;字段
groups;_()可译;无障碍title/label。
第九章 —— 动作
- 数据流:菜单
action→ir.actions.act_windowid → 客户端load_action→ 取res_model、views →ir.ui.viewarch +fields_get。 - 判断:错;
binding不能替代 ACL。 - 借阅超期:服务器动作——自动化/cron 或
ir.actions.server调mail.mail/activity;客户端动作——仪表盘act_window或 client action 展示 KPI**。 - 空白:模型名拼写、模块未装、无 ACL、domain 过滤光、视图 arch 报错(升级日志)。
第十章 —— 菜单
- 同 action 两菜单:利 配置省重复;弊 面包屑/书签难分;不同 context/domain/默认视图 时应 拆两个
act_window。 - i18n:用户可见字符串 进
_()/ PO;技术 XML ID 不译。 - 示意图:菜单
groups→ 可见 → 动作打开模型 → ACL 决定 CRUD → 规则过滤行。 action格式:ir.actions.act_window,<db_id>字符串(或等价格式,以技术字段为准)。
第十一章 —— 数据文件
<function>:model="library.book"name="action_fill_default_code",方法内ir.sequence或规则生成default_code,search([('default_code','in',[False,''])])批量更新。<delete search=...>:全量备份、staging 演练、统计search_count、维护窗口、回滚脚本。noupdate:首次ir.config_parameter默认值 用noupdate="1";用户改后升级 不覆盖;若需强制更新 单独迁移或临时改 noupdate。post_load:Python 侧 钩子,不替代 data XML;用于 monkeypatch/注册 等(以官方为准)。
第十二章 —— 继承机制
library.member:_inherits = {'res.partner': 'partner_id'},partner_idrequired;视图 inheritbase.view_partner_form加level。- 对比表:经典 同表扩展、JOIN 少、升级 xpath 风险;委托 多表、JOIN、适合「会员是一种伙伴」;原型 复制模型、数据重复、慎用。
product.product:查阅源码_inherits指向product.template,_inherit扩展 等——按实际代码写一句。- Delegate 警告:删除委托记录对子记录影响、性能 等(摘自官方 Inheritance)。
第十三章 —— QWeb 模板
- 收据 PDF:
report+ QWeb;t-call页脚 含t-field页码;表体t-foreach借阅行。 - 角色:运营 要 可筛选导出 Excel;客户/存档 要 版式固定的 PDF。
t-raw审计:用户 HTML → 需改t-out/消毒;静态模板 → 可信。- deprecated:按当前 QWeb 文档记 一条(如
t-raw迁移)。
第十四章 —— 系统架构总览
- 序列图:Browser
call_kw(load_views)→ Odoo Controller →Registry模型+视图 →search_read→ PostgreSQL → JSON 返回 → OWL 渲染。 - 指纹:hash 文件名 → 长期缓存;内容变则 hash 变 → 客户端重新拉取。
- JS 不生效:
-u模块、硬刷新/清缓存、CDN 缓存、?debug=assets、assets路径/@odoo-module。 - 对比:后台 SPA SEO 弱、首包大、交互强;Jinja SEO 友好、首屏简单、交互弱。
第十五章 —— 数据库操作
- 误删恢复:停写 → 从备份恢复 PG(PITR 若可用)→ filestore 对齐时间点 → 业务抽检 → 事故沟通。
- 取舍:read_group——尊重规则、ORM 缓存、复杂 domain 方便;SQL——极复杂聚合/性能极限、须防注入与绕过规则意图。
- 月度统计:ORM
read_group+ domain 日期;SQLGROUP BY date_trunc('month',...)+ 参数化。 - 备份加密:磁盘/磁带加密、密钥与备份分存、访问审计、脱敏副本。
第十六章 —— Odoo 核心数据结构
- ER:
res.users→partner_id→res.partner;users↔groupsM2M;company_ids/company_id多公司。 - 删
ir.model.data行:下次-u可能 重建记录 或 孤儿菜单——取决于 XML 是否仍存在;常导致 重复或加载失败。 - Transient 例子:向导、
mail.compose.message等——短期数据。 - Registry:启动时按依赖加载
ir.model,再 注册 Python 模型类——一句话:元数据先于业务 Registry 就绪。
第十七章 —— SmartButton 设计
- 设计:
loan_count(未还)computesearch_countstate=borrowed;history_countsearch_count全部历史;或One2many+related视需求。 - 性能:store=True 适合 大表频繁打开、需排序筛选;read_group 适合 数据量小或强实时、可接受每次算。
- 无障碍:
title/aria-label、搭配文字链接、不只图标。 - 拓展:摘录
action_view_*里self.env['ir.actions.actions']._for_xml_id(...)打开窗口。
第十八章 —— 工作流与状态机
- 状态图:draft → submitted → approved → done;cancel 自 draft/submitted;禁止 done → draft(除非业务允许反冲)。
- 并发:双写最后一条覆盖 或 重复提交;防护:SQL 约束、
write校验状态、@api.constrains、乐观锁版本字段。 - 合规:金融/医疗等需 审计追踪;
mail.thread有帮助 但 未必满足「不可篡改」——需 WORM/外部审计。 - 借阅单:状态 +
mail.activity提醒经理 + cron 扫超期activity_schedule。
第十九章 —— 报表引擎
- 借阅汇总:Wizard
TransientModel输入 起止日期 →report_action传data→ QWebt-foreach聚合查询结果(read_group或 SQL)。 - 跨公司:
with_company明确公司;domain 带company_id;禁止sudo无界查询;规则测试。 - PDF 内存:减小每页数据量、分页渲染、查 wkhtmltopdf 日志、避免模板无限嵌套
t-foreach。 - Paper format:纸张与边距;layout 决定 页眉页脚与 CSS——二者配合出成品 PDF。
第二十章 —— 邮件系统
- 时间线:提交 → message_post 通知经理 + activity;审批 → 状态消息;完成 → 感谢邮件模板(
mail.template)。 - 保留 7 年:分区/归档
mail.message、冷存储、压缩附件、独立邮件归档系统。 - 外发失败:SMTP 配置、端口/TLS、防火墙、SPF/DKIM、Odoo 日志
mail。 - Discuss/bus:长轮询/WebSocket 推送 与 bus 服务 相关(按官方一句)。
第二十一章 —— 定时任务
- 归档:优先依赖 框架对 Transient 的自动清理;若自定义 大批量——cron
unlink带limit分批。 - 告警:cron
try/except+_logger+ 写ir.logging/ 发mail.mail/ webhook。 - 10 万提醒:单 cron 批处理、按
id范围分段、避免每用户一条 SQL、索引next_call字段。 - admin 风险:绕过规则;用 专用用户 或 显式
with_user并 最小权限。
第二十二章 —— 序列号
LO/2026/00001:ir.sequenceprefix='LO/%(y)s/'(或%(range_year)s视语法)、padding=5,每年新 sequence 或使用use_date_range(以版本为准)。- CSV 5000 条:预分配 ref 或 导入后统一
write触发序列;避免 与 手输 ref 冲突——导入前search重复。 no_gap:性能差/锁竞争、回滚仍耗号——一句记风险。- 多公司:
company_id不同可同code独立number_next;切换公司各建一条 sequence 验证。
第二十三章 —— 翻译与国际化
- 报表语言:用户
lang个性化;公司默认 统一对外;利弊:法务一致性 vs 用户体验。 hreflang:多语言 URL 与 搜索引擎地域;Odoo 多网站 需 正确alternate链接(笔记一句)。- Review 规则:用户可见字符串禁止中文硬编码在 Python——必须
_()。 - JSONB
zh_CN:name->>'zh_CN'(PostgreSQL)或#>> '{zh_CN}'(以字段结构为准)。
第二十四章 —— 向导
- 防重复提交:前端 disable 按钮;后端
write幂等/状态机;DB unique 约束。 - 审计:Transient 不留痕;业务结果
message_post或 写持久模型日志。 - 删除确认:Char 字段
confirmation;@api.constrains校验 ==DELETE。 - 清理周期:Transient 自动删除——通常数小时到一天量级(查
ir.cron/ 官方说明)。
第二十五章 —— 看板与高级视图
- 角色:销售 看板看阶段;调度员 日历看时间资源(理由各一句自洽即可)。
- 性能:缩小 domain、limit、read_group 列统计、减少卡片装饰、索引分组字段。
- 共用字段:同一
library.loan:stage_id看板 +date_end日历;勿拆两模型 除非生命周期不同。 - card 迁移:Odoo 19 用
<card>/新结构——升级 xpath 与模板要对照 8.3。 - 判断:正文已给 「对,若 write 命中且约束含该字段」。
第二十六章 —— 仪表盘
- 缓存 5 分钟:键
user.id + company.id + KPI 名;失效:超时 TTL 或 Bus 订阅业务写入。 - 权限证明:例:用户 A 仅能看本公司订单 → ORM
search_count与界面 KPI 一致;构造跨公司 domain 应被规则挡。 - 不一致:时区边界、订单状态筛选不同、多公司上下文、缓存未刷新。
- 手动刷新:按钮
clear cachestate + 重新orm.searchRead。
第二十七章 —— 编码规范
- Review 清单(示例):有无
sudo/SQL 注入、测试是否加、xpath 注释、_()、N+1、模块depends、秘密不进 Git、权限 CSV、性能热点、升级脚本。 - pre-commit:ruff、end-of-file-fixer、trailing-whitespace、check-xml 等。
- 2000 行视图:按模型/功能拆 XML、文件命名清晰、inherit 分文件。
- 判断:错,PEP 8 非语法。
第二十八章 —— 调试工具
- N+1:SQL logger 见 大量相似 SELECT by id;单次重查询 单条大 SQL / Network 一次
search_read字段过多。 - 脱敏:邮箱/手机/hash;token 不全打;PII 合规最小化。
- 调试点:Browser → Network → 路由 → Controller →
call_kw→ ORM → SQL → PG。 - HttpCase:断言
status_code、log capture(assertLogs)区分 404 与 500。
第二十九章 —— 测试体系
- CI 矩阵:最小 单 Odoo 版本 × 官方支持 Python 之一;理由:降本;扩展再加矩阵。
setUpClassvs XML:Class 快、共享昂贵数据;XML 贴近真实数据、慢;反之 隔离差 / 维护成本。- 本地绿 CI 红:时区、
-at_install标签、缺少依赖模块、demo 数据、随机顺序。 - 安全:见正文 参考答案提示。
第三十章 —— 权限与安全
- 红队:SQL 拼接、越权 id 遍历、CSRF 伪造 POST。
- GDPR:匿名化、备份含删除权、日志删除策略。
- 列表见号打不开:列表与表单 ACL 不一致 或 表单视图
groups/ 规则在read更严。 - 实操:测试用户 切换 验证 domain 与 预期行数。
第三十一章 —— 性能调优
- 1 万条流畅:分页/search limit、避免可编辑全表、虚拟滚动(视 web 支持)、domain 预筛选。
- VACUUM/ANALYZE:低峰窗口;风险 IO 飙升、锁。
- Seq Scan:加索引、修正 domain、ANALYZE、减少
order无索引字段。 - 读路径:
search_read→ ORM prefetch → SQL → PG;prefetch 在关系字段批量读时。
第三十二章 —— OWL 框架
- Systray:registry
systray注册组件;useService("orm")查 mail 未读数;点击actionService.doAction打开 Discuss。 - Service + Bus:Service
setIntervalpoll → 结果放 Bus 事件 → 列表组件useBus刷新。 - 迁移:列 Widget 名 → 找 Registry 字段组件 → 改模板 widget → 删 legacy。
- 子组件编辑备注:父 state + 子 props 回调
onSave,不用 Bus 传正文。 - 阅读:按官方 Dialog
slots文档 勾选 props 类型。
第三十三章 —— JavaScript 开发
- 避免重复 patch:合并补丁模块、上游冲突、升级难测。
- 前端 domain:禁止仅信——须后端重写/校验。
- 两路径:标准 RPC 走 session+jsonrpc;自定义 Controller 查 CSRF/token 文档。
- 实操:
useService("user")或 session 信息 取 db 名(以 API 为准)。
第三十四章 —— CSS/SCSS 与样式
- 暗色:全局语义变量;组件 局部 class 覆盖。
- 魔法数:只允许 SCSS 变量、design token 文件。
- 错乱:先看 DOM → 选择器是否仍命中 → 资产顺序/
!default。 - Coverage:看同一 SCSS 是否进多个 bundle——重复 import。
第三十五章 —— 组件开发
- 命名示例:
my_lib_loan_card、my_lib_isbn_field、my_lib_kpi_badge。 - aria 清单:图标按钮必有 label、表单控件关联 label、焦点可见、错误
aria-live、不只用颜色表意。 - x2many:新增行保存、删除行、Tab 切格丢焦点 等 任二。
- 单测:mock
record.update断言调用 与 DOM 文本。 - Html widget:禁止
t-raw用户内容、服务端再消毒、限制 script/iframe。 - 阅读:官方 slots 与 Dialog 示例。
第三十六章 —— 前端路由与控制器
- JSON 列表:GET
/api/books?limit=request.env['library.book'].search_read;HttpCaseurl_open断言 JSON。 - Rate limit:Nginx
limit_req+ 应用内 token 桶。 - REST vs jsonrpc:REST 给 外部系统集成;jsonrpc 给 同源 WebClient/深集成。
- UserError:JSON-RPC 包装错误;记录 notification 文案 与 HTTP 码。
第三十七章 —— 外部 API
- 幂等 create:外部
idempotency_key字段 unique;或ir.model.data映射;重试先 search。 - 审计字段:caller、db、model、method、args_hash、duration_ms、status、error、uid、timestamp。
- 高吞吐:RPC 批处理 低延迟同源;REST+队列 削峰、异构消费者。
- 集成用户:禁 Settings/Technical、禁
base.group_system,仅业务 API 组。
第三十八章 —— REST 与 Webhook
- OAuth2 vs API Key:OAuth 轮换短 token、审计细;API Key 实现简单、需 IP 限制+轮换。
- 版本协商:小团队
/v1/;大平台 Header 协商多版本并存。 - Webhook 接收:HMAC、IP 允许列表、事件 id 幂等、限流。
- HttpCase:无/错 Key
assertEqual(res.status_code, 401)。
第三十九章 —— Extract API
- 合规:保留期 7 年/按法务、仅财务组读附件、备份加密、访问日志。
- 成本:附件 hash 去重、批量上传、失败重试退避。
- 泳道:用户上传 → Odoo 存附件 → 调 Extract → 回写 wizard → 会计确认 →
account.move。 - 拒绝入账:低置信度、缺税号、金额异常、供应商黑名单。
第四十章 —— IoT 硬件集成
- 100 台升级:分批 canary、失败回滚固件、门店离线缓存队列。
- 证书轮换:新证双绑 → 客户端全量更新 → 老证过期下线。
- 延迟排查:先看局域网 → IoT CPU/内存 → 驱动重试/日志。
- 组件图:POS → Odoo server → IoT Box → 打印机/扫码。
第四十一章 —— AI 智能化集成
- 脱敏:去 PII、摘要替代全文、假名化。
- 成本:按调用计费;chatter 先
summarize再送模型、缓存 FAQ embedding。 - 内控:AI domain 弱于固定筛选器(可注入、难审计)。
- 禁止送入 AI:密码、token、卡号、薪资、健康、未公开合同全文。
第四十二章 —— 安装与配置
- 容量:worker ≈ 1+2×CPU 上限受 RAM;反例:长报表占满 worker 公式失效。
- 备份:WAL PITR;filestore 与 DB 同一时间戳 防孤儿附件。
- 502:Nginx upstream、worker OOM、PG 连接满、磁盘满、超时。
- 拓扑:用户 CDN Nginx Odoo PG 一线图。
第四十三章 —— CI/CD 与自动化运维
- 蓝绿与长事务:绿切流量前 须等长事务完 或 读写分离;Odoo 长事务 易堵迁移。
- 密钥:deploy key 只读拉代码;secret 管 API token。
- 周五发布:备份截图、
-u顺序清单、rollback tag、staging neutralize 验证。 - artifact:
actions/upload-artifact指向odoo.log条件failure()。
第四十四章 —— 版本管理
- 回滚:停服务 → DB 还原 → filestore 对齐 → 代码
git checkouttag → 冒烟。 - rename model:迁移脚本改表名、
ir.model.data更新、外键/M2M 引用表名。 - 17→19 检查:Python 3.12、
_cr/json路由、资产、Changelog、迁移脚本阶段。 - PR 模板:备份证明、staging 日志、回滚负责人 @、风险登记。
第四十五章 —— 模块设计模式
- 策略模式:上下文
sale.order、接口compute_price、注册表 dict[str,Strategy]。 - README:简介、安装、配置、依赖、已知问题、升级、许可、截图、支持。
- mixin 冲突:方法加模块前缀
_sale_*/_purchase_*或 抽象子 mixin。 - 抽 mixin:重复
_compute_domain_open→library.domain.mixin。
第四十六章 —— 高级开发
- 大作业:按 模型→安全→视图→报表→网站页→Controller→tests 分期交付检查单 自评。
- 翻车点:多公司库存未按公司隔离、网站价目取错 pricelist、public 路由泄露内部数据。
- Review:xpath 冲突、Studio
x_*命名、sudo、测试覆盖 sale 扩展、升级脚本。 - 分工:45 模式与多公司货币底层;46 Studio/网站/Spreadsheet 产品层。
- 判断:错。
- 46.9:密钥泄露、无法吊销、打印扩散(合理即可);判断 错。
- 46.10:Sign 含产品化签署流程与证据链(一句);判断 错。
- 46.11:可复制文本/截图 故不能单靠水印保密;判断 错。
- 46.12:PDF 固定归档/打印 vs Word 可编辑交付;判断 错。
第四十七章 —— 常见应用场景
- 47.1 练习 1:RPC/Cron/服务器动作 等路径 不保证与 UI 相同假设,仅靠界面无法覆盖 API 层隔离。
- 47.1 练习 2:错;
sudo绕过规则,不能依赖env.company自动隔离。 - 47.2 练习 1:仅
company_id = ?→ 单字段索引常够用;同时状态/日期/排序 →(company_id, state)等 复合索引 更匹配 组合 WHERE。 - 47.3 练习 1:序列号 一物一码;批次 同 SKU 多数量共 lot。
- 47.3 练习 2:依流程;常见 拣货/发货 指定,非 订单行必选。
- 47.4 练习 1:易把归档数据拉回业务查询;配合 sudo 或 弱规则 时 泄露风险 上升。
- 47.5 练习 2:破坏请求事务语义、与重试/并发不协调、部分成功难排查;优先队列/分批在可控边界提交。
- 综合:简图示例:
HTTP→request.env(user/company) →ir.rule拼 domain →_search生成 SQL → PostgreSQL。(表述合理即可。)
第四十八章 —— AI 集成
- 48.0 练习 1:回复载体 为 mail/discuss 消息线程,依赖 mail 的 follower、权限、通知与 UI。
- 48.1 练习 1:把 不同入口(顶栏、chatter、composer) 映射到 不同 Agent 与默认提示,避免 一套配置打天下。
- 48.1 练习 2:错;
_trigger()仍会执行。 - 48.2 练习 1:不同 embedding 模型向量空间不同,混用 检索无意义。
- 48.3 练习 1:仍有
_get_message_with_access/ 频道校验;访客上下文 由add_guest_to_context等到env(表述合理即可)。 - 48.3 练习 2:错。
- 48.3 练习 3:缓冲导致 chunk 攒批 → 失去流式/打字机 或 长时间无输出直至超时(表述合理即可)。
- 48.3 练习 4:不宜无状态混用;SSE 草稿 +
message_post定稿 或 单通道(与正文一致即可)。 - 48.4 练习 1:单次 API 返回中 并行
tool_calls最多处理条数(与日志「limit reached」一致)。 - 48.5 练习 1:大列表被省略 → 分析可能缺字段 → 应 显式工具查询或缩小范围。
- 48.5 练习 2:错。
- 48.6 练习 2:可执行、可审计,减少 无法验证的建议。
- 综合 1:用户消息 →
/ai/generate_response(jsonrpc) →_generate_response_for_channel→LLMApiService→message_post→ Discuss/Bus 推送前端(可简化)。 - 综合 2:SSE:打字机 UX、需 流式路由与超时/缓冲 治理;整段发帖:实现简单、长生成阻塞 与 差分 UX。(各两条合理即可)。
- 综合 3:限制候选附件 → 缩小索引范围 + 防跨源泄露(checksum 来自 当前 agent 的 sources)。
- 综合 4:成本暴涨、worker 长时间持锁/超时、滥用工具(任两条)。
第四十九章 —— Odoo 环境部署
- 49.1 练习 1:隔离依赖、避免污染系统 Python、便于多版本并存。
- 49.1 练习 2:错;
admin_passwd为数据库管理主密码。 - 49.2 练习 2:无 TLS、缺 WAF/限流、暴露数据库管理;应 443 + 反向代理。
- 49.3 练习 1:与 Linux 文档一致、编译链完整、少踩 Windows 原生编码/路径坑(任两条)。
- 49.3 练习 2:错。
- 49.4 练习 2:Homebrew 安装的库不在默认搜索路径,需 LDFLAGS/CPPFLAGS 辅助 psycopg2 等编译。
- 49.6 练习 1:缺字体、子集/嵌入不当、引擎不支持该字体格式(与 第十九章 §19.2 一致即可)。
- 49.6 练习 2:开放题;要点:
wkhtmltopdf --version(若栈为 wkhtml)、界面打印含中文 QWeb-PDF、失败时对照 §49.6.6 与 第四十二章 时限。 - 综合 2:Nginx/代理、worker 与资源限制、日志与备份(第四十二章 自拟节名合理即可)。
第九十九章 —— 附录(印刷装订前自检)
- 图档:
rg '\./images/[^)]+' -o去重 与images/目录列表 diff。 - 排版:Pandoc 一章 看 代码是否断行乱码、表格加
\longtable模板(按需)。 - 习题册:即本文件;勿与学员版 PDF 合并。
- checklist 示例:读 Changelog → grep 废弃 API → 跑 upgrade_code → 副本库 -u → 跑测试 → 回滚演练。
- Domain vs SQL:Domain 前缀逻辑+ORM 权限;SQL 中缀 WHERE+须自管权限。
文档版本:与 odoo19开发白皮书 正文同步维护;发现与官方文档冲突时以官方为准。