Odoo17门户「我的账户」添加自定义Enquiry菜单失败求助
解决Odoo17「我的账户」自定义菜单不显示问题
1. 修正模板继承目标
原代码错误继承了portal.portal_layout,但「我的账户」的菜单入口区域实际在portal.portal_my_home模板中,需修改继承目标:
<odoo> <template id="portal_my_home_inherit" inherit_id="portal.portal_my_home"> <!-- 后续插入菜单的代码 --> </template> </odoo>
2. 精准定位菜单插入位置
原XPath范围过广,「我的账户」的菜单卡片统一放在div.o_portal_docs容器内,需调整定位:
<xpath expr="//div[hasclass('o_portal_docs')]" position="inside"> <t t-call="portal.portal_docs_entry"> <t t-set="url">/my/enquiry</t> <t t-set="title">Enquiry</t> <!-- 可选:添加统一风格的图标 --> <t t-set="icon" t-value="'fa-question-circle'"/> </t> </xpath>
3. 配置路由与视图确保可访问
菜单点击后需能跳转至对应页面,需在自定义模块中补充以下配置:
路由配置(controllers/main.py)
from odoo import http from odoo.http import request class PortalEnquiry(http.Controller): @http.route('/my/enquiry', auth='user', website=True) def portal_my_enquiry(self): # 仅显示当前用户的咨询记录 enquiries = request.env['enquiry'].search([('partner_id', '=', request.env.user.partner_id.id)]) return request.render('wb_portal.portal_enquiry_list', { 'enquiries': enquiries, })
列表视图模板(views/portal_templates.xml)
<template id="portal_enquiry_list" name="Enquiry List"> <t t-call="portal.portal_layout"> <div class="container o_portal_container"> <h1>我的咨询</h1> <table class="table table-striped"> <thead> <tr> <th>主题</th> <th>创建时间</th> <th>状态</th> <th>操作</th> </tr> </thead> <tbody> <t t-foreach="enquiries" t-as="enquiry"> <tr> <td><t t-esc="enquiry.subject"/></td> <td><t t-esc="enquiry.create_date"/></td> <td><span t-esc="enquiry.state"/></td> <td><a t-attf-href="/my/enquiry/#{enquiry.id}" class="btn btn-sm btn-primary">查看详情</a></td> </tr> </t> </tbody> </table> </div> </t> </template>
4. 配置门户用户权限
在模块的security/ir.model.access.csv中添加权限规则,确保门户用户能读取咨询记录:
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_enquiry_portal,enquiry.portal,model_enquiry,base.group_portal,1,0,0,0
5. 模块更新与缓存清理
- 升级自定义模块
wb_portal - 进入Odoo后台「设置 > 技术 > 工具 > 清除缓存」
- 强制刷新门户页面(避免浏览器缓存影响)
常见排查点
- 检查模板是否激活:在「设置 > 技术 > 用户界面 > 视图」中搜索
portal_my_home_inherit,确认状态为激活 - 直接测试路由:访问
/my/enquiry,验证页面是否能正常打开 - 确认用户权限:确保当前登录的门户用户有对应
enquiry记录的访问权限
内容的提问来源于stack exchange,提问作者Shital Jamadade
相关产品推荐
相关产品推荐

