OpenERP 8门户模块定制客户首页:如何获取登录客户ID?
在OpenERP 8门户中获取当前登录客户ID的解决方案
嘿,刚好之前在OpenERP 8里做过门户首页的定制,给你梳理下怎么快速拿到当前登录客户的ID,进而展示他们的专属产品:
核心思路
在OpenERP 8的网站控制器中,当路由设置了auth='user'时,你可以通过request对象直接获取当前登录的用户记录,而每个用户都会关联对应的客户(res.partner)记录——这正是你需要的客户ID来源。
控制器代码修改示例
把你现有的控制器改成这样,就能拿到客户ID并查询对应产品了:
from openerp.addons.web import http from openerp.http import request class PortalHomeController(http.Controller): @http.route('/home', auth='user', website=True, type="http") def portal_home(self): # 1. 获取当前登录的系统用户(res.users模型) current_user = request.env.user # 2. 关联到对应的客户记录(res.partner模型) current_customer = current_user.partner_id # 3. 提取客户ID customer_id = current_customer.id # 4. 根据客户ID查询其名下所有产品(这里假设产品模型是product.product,关联字段是partner_id,按需调整) customer_products = request.env['product.product'].search([('partner_id', '=', customer_id)]) # 5. 把数据传递给你的"my homepage"模板 return request.render('your_module_name.my_homepage_template', { 'current_customer': current_customer, 'customer_products': customer_products, })
关键细节说明
request.env.user:这是OpenERP控制器中获取当前登录用户的标准方式,返回的是res.users的记录对象。user.partner_id:OpenERP的用户和客户是一对一关联的,门户用户登录后,这个partner_id就是该客户的专属记录,直接取id即可。- 产品查询部分:你需要根据自己实际的产品模型和关联字段调整
search方法的条件,比如如果产品是通过customer_id关联的,就把partner_id改成对应的字段名。
模板中展示产品示例
在你的"my homepage"模板里,就可以直接用传递过来的customer_products变量来渲染产品列表了:
<div class="portal-home-products"> <h2>您的专属产品</h2> <div class="product-list"> <t t-foreach="customer_products" t-as="product"> <div class="product-item"> <h4><t t-esc="product.name"/></h4> <p><t t-esc="product.description_sale"/></p> <!-- 其他产品信息按需展示 --> </div> </t> </div> </div>
注意事项
- 确保门户用户的
partner_id字段已经正确关联到对应的客户记录,避免出现空值。 - 如果你的产品关联逻辑比较复杂(比如通过中间表关联),需要调整
search方法的域条件来适配。
内容的提问来源于stack exchange,提问作者Amor.o
相关产品推荐
相关产品推荐

