You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo 17社区版如何通过API返回JSON字段?调试遇错求助

Odoo 17社区版JSON接口访问报错排查方案

问题1:请求方法不匹配

你的路由仅允许POST请求,但浏览器直接输入URL发起的是GET请求,这会触发错误。解决方式二选一:

  • 修改路由配置,同时支持GET和POST:
    @http.route('/api/contacts', type='json', auth='public', methods=['GET', 'POST'])
    
  • 使用Postman、curl等工具发送POST请求,请求体可传空JSON(接口未用到请求数据)。

问题2:Public用户权限不足

路由设置auth='public',但Odoo默认Public用户没有res.partner模型的读取权限,查询联系人时会抛出权限错误。解决步骤:

  1. 进入Odoo后台,依次打开「设置」→「技术」→「权限」→「组」,找到Public组。
  2. 编辑该组,在「访问权限」标签下找到联系人(res.partner)模型,勾选「读取」权限。
  3. 保存后刷新权限缓存(可重启Odoo或在设置中点击「刷新权限」)。

可选优化:避免空字段报错

代码中直接获取contact.state_id.name和contact.country_id.name,若联系人未设置州/国家,会触发AttributeError。修改为:

'state': contact.state_id.name if contact.state_id else '',
'country': contact.country_id.name if contact.country_id else ''

修改后的完整代码

from odoo import http
from odoo.http import request

class ContactController(http.Controller):

    @http.route('/api/contacts', type='json', auth='public', methods=['GET', 'POST'])
    def get_contacts(self):
        try:
            # 打印请求数据用于调试
            print("Request data:", request.jsonrequest)

            # 查询非公司类型的联系人
            contacts = request.env['res.partner'].search([('is_company', '=', False)])
            contact_list = []
            for contact in contacts:
                contact_list.append({
                    'id': contact.id,
                    'name': contact.name,
                    'email': contact.email,
                    'phone': contact.phone,
                    'street': contact.street,
                    'city': contact.city,
                    'state': contact.state_id.name if contact.state_id else '',
                    'country': contact.country_id.name if contact.country_id else ''
                })
            return contact_list
        except Exception as e:
            # 打印异常信息用于调试
            print("Error:", str(e))
            return {'error': str(e)}

内容的提问来源于stack exchange,提问作者user3891365

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:27:20