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

Odoo自定义POST端点报Method Not Allowed错误求助

Odoo POST端点调用出现"Method Not Allowed"错误排查与修复

调用自定义的Odoo CRM线索创建端点时,收到如下错误:

Method Not Allowed
The method is not allowed for the requested URL.

用户的自定义控制器代码如下:

from odoo import http
from odoo.http import request
from odoo.exceptions import ValidationError

class ApiController(http.Controller):

    @http.route('/api/create_crm_lead', type='json', auth='none', methods=['POST'])
    def create_crm_lead(self, **kwargs):
        # 从请求中提取JSON数据
        data = request.json

        # 验证必填字段
        required_fields = ['name', 'contact_name']  # 根据需求调整
        missing_fields = [field for field in required_fields if field not in data]
        if missing_fields:
            return {'error': f'缺少必填字段: {", ".join(missing_fields)}'}

        try:
            # 创建新的CRM线索
            new_lead = request.env['crm.lead'].sudo().create({
                'name': data.get('name'),
                'contact_name': data.get('contact_name'),
                # 根据需要添加更多字段
            })

            return {'success': True, 'id': new_lead.id}
        except ValidationError as e:
            return {'error': e.name}

可能的原因及修复方案

  • 请求方法/Content-Type不匹配
    确保请求使用POST方法,且请求头Content-Type设置为application/json。因为路由type='json'要求请求体必须是JSON格式,否则Odoo会直接拒绝请求。

  • CSRF验证拦截
    即使设置了auth='none',部分场景下Odoo仍会触发CSRF检查。在路由装饰器中添加csrf=False参数即可解决:

    @http.route('/api/create_crm_lead', type='json', auth='none', methods=['POST'], csrf=False)
    
  • 路由冲突
    检查是否有其他模块定义了相同的/api/create_crm_lead路由,导致当前路由被覆盖。可以修改路由路径为唯一值,比如/api/custom/create_crm_lead。

  • 模块未更新/安装
    确保自定义控制器所在的模块已经安装,且修改代码后执行了更新模块操作(Odoo需要重新加载路由配置才能生效)。

测试建议

用curl命令测试修复后的端点:

curl -X POST -H "Content-Type: application/json" -d '{"name":"测试线索","contact_name":"测试联系人"}' http://你的Odoo地址/api/create_crm_lead

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:12:12