Odoo 10创建Res Partner REST API遇404错误求助
Odoo Res Partner API 404错误排查方案
一、核心问题:Manifest文件位置错误
你的__manifest__.py放在了models/目录下,不符合Odoo模块规范。Odoo只会从模块根目录读取manifest文件识别模块,models目录下的manifest不会被加载,导致整个模块未被系统识别,控制器路由自然无法注册。
修正步骤:
- 将
models/__manifest__.py移动到模块根目录Custom_Api/下 - 删除
models/目录下的空__init__.py(若无其他用途)
二、init.py文件内容缺失
Odoo依赖__init__.py文件导入控制器类,否则控制器不会被加载到系统中。
修正步骤:
- 模块根目录的
__init__.py添加以下内容:
from . import controllers
controllers/__init__.py添加以下内容:
from . import main
三、控制器返回格式优化(解决404后可能遇到的问题)
直接返回字典不符合HTTP响应规范,建议转换为JSON格式返回,同时设置正确的响应头:
修正后的控制器代码:
from odoo import http from odoo.http import request import json class PartnerApi(http.Controller): @http.route('/api/partners', type='http', auth='public', methods=['GET'], csrf=False) def get_partners(self): partners = request.env['res.partner'].sudo().search([]) result = [] for partner in partners: result.append({ 'id': partner.id, 'name': partner.name, 'email': partner.email, }) return request.make_response(json.dumps(result), headers={'Content-Type': 'application/json'}) @http.route('/api/partner', type='http', auth='public', methods=['POST'], csrf=False) def create_partner(self, **kwargs): name = kwargs.get('name') email = kwargs.get('email') if not name: return request.make_response(json.dumps({'error': 'Name is required'}), headers={'Content-Type': 'application/json'}, status=400) partner = request.env['res.partner'].sudo().create({ 'name': name, 'email': email }) return request.make_response(json.dumps({ 'success': True, 'id': partner.id, }), headers={'Content-Type': 'application/json'})
四、确认模块已正确安装
完成以上修正后,重启Odoo服务,在Odoo后台「应用」菜单中搜索模块REST API for Res Partner v2,确保模块已安装。
内容的提问来源于stack exchange,提问作者StressCodingCok
相关产品推荐
相关产品推荐

