Odoo 13自定义模型x_eventcoursetype出现CacheMiss错误求助
Odoo 13
CacheMiss/MissingError 问题排查与解决 问题原因
核心触发点:current_xevtyp 变量指向了已被删除的 x_eventcoursetype 记录(ID=6),模板渲染时直接访问 current_xevtyp.x_name,Odoo 尝试读取不存在的记录字段,先触发 CacheMiss,最终转为 MissingError。
前台显示正常的原因:部分请求上下文里 current_xevtyp 未指向无效记录,或前端缓存掩盖了错误,但后台模板渲染仍会持续触发报错。
解决方案
1. 紧急修复:清理无效筛选上下文
- 手动访问网站事件页面,切换到其他事件类型或「All Event Types」,覆盖浏览器中保留的
xevtyp=6无效参数。 - 若涉及多用户,可通过数据库清理相关会话数据,或在后端拦截无效参数。
2. 模板层面:添加记录有效性校验
修改 XML 模板中访问 current_xevtyp 的代码,增加 exists() 检查,避免直接访问已删除记录的字段:
<a href="#" role="button" class="btn dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-folder-open"/> <t t-if="current_xevtyp and current_xevtyp.exists()" t-esc="current_xevtyp.x_name"/> <t t-else="">All Event Types</t> </a>
exists() 方法会验证记录是否在数据库中真实存在,无效时自动切换为默认文本,阻断报错触发链。
3. 后端逻辑层面:确保上下文变量有效性
如果 current_xevtyp 由后端控制器生成,需在获取记录时添加存在性校验:
# 示例:修改控制器中获取当前事件类型的逻辑 xevtyp_id = request.params.get('xevtyp') current_xevtyp = None if xevtyp_id: temp_record = request.env['x_eventcoursetype'].browse(int(xevtyp_id)) # 仅保留有效记录 if temp_record.exists(): current_xevtyp = temp_record
从根源确保传入模板的 current_xevtyp 要么是有效记录,要么为 None。
4. 数据层面:清理无效关联
检查 event.event 表中是否有记录仍关联已删除的 x_eventcoursetype(ID=6),批量更新这些记录的关联字段为 Null 或其他有效类型,避免后续操作触发同类错误。
内容的提问来源于stack exchange,提问作者Ahrimann Steiner
相关产品推荐
相关产品推荐

