在Odoo框架中,Controllers是处理用户请求和返回相应数据的关键组件。它们通常与前端视图(Views)配合使用,响应用户操作,如表单提交、数据查询等。本教程将详细介绍如何在Odoo中操作Controllers,包括创建Controller、定义动作(Actions)和方法(Methods),并通过代码示例解释各个参数的作用。
创建Controller
在Odoo中,Controller通常是Python类,位于模块的controllers
文件夹中。每个Controller类继承自osv
模块的osv
类。以下是创建一个简单的Controller类的例子:
from odoo import models, http
class MyCustomController(models.Osv):
_name = 'my.custom.controller'
_description = 'My Custom Controller'
# 定义一个动作,它将被映射到Controller的一个方法
@http.route('/my_custom_action', auth='public', methods=['get'])
def my_custom_action(self, **kwargs):
# 在这里编写处理逻辑
return 'Hello from My Custom Controller!'
在这个例子中,_name
属性定义了Controller的唯一标识符,_description
属性提供了Controller的描述信息。@http.route
装饰器定义了一个HTTP路由,它将URL/my_custom_action
映射到my_custom_action
方法。
定义动作和方法
在Controller中,可以通过定义动作和方法来处理不同的用户请求。动作通常对应于一个URL路径,而方法则是Controller中的具体函数。
动作示例
@http.route('/my_custom_action/<int:id>', auth='public')
def my_custom_action_with_id(self, id, **kwargs):
# 使用id参数
record = self.env['my.model'].search([('id', '=', id)])
if record:
return record.name
else:
return 'No record found!'
在这个动作示例中,<int:id>
是一个路径参数,表示URL中的一个整数部分。auth='public'
表示这个动作不需要身份验证,任何人都可以访问。methods=['get']
指定了这个动作只响应GET请求。
方法示例
def create_new_record(self, data):
# 创建新的记录
new_record = self.env['my.model'].create(data)
return {'redirect': {'type': 'list', 'target': new_record.id}}
在这个方法示例中,create_new_record
接受一个字典data
作为参数,这个字典包含了创建新记录所需的字段数据。self.env['my.model'].create(data)
调用创建了一个新的记录,并返回了记录的ID。方法的返回值是一个字典,指定了在创建记录后的行为,这里使用了重定向到列表视图,并高亮显示新创建的记录。
处理表单提交
在Odoo中,表单提交通常涉及到数据的创建或更新。Controller中的方法可以处理这些操作,并返回相应的结果。
处理创建操作
def create(self, data):
# 创建记录
created_ids = self.env['my.model'].create(data)
return {'type': 'ir.actions.act_window', 'res_model': 'my.model', 'res_id': created_ids}
在这个例子中,create
方法接受一个包含字段数据的字典data
,并使用create
方法在my.model
模型中创建新记录。created_ids
是新创建记录的ID列表。方法返回一个动作字典,它将触发一个新的列表视图,显示新创建的记录。
处理更新操作
def write(self, ids, data):
# 更新记录
updated_records = self.env['my.model'].browse(ids).write(data)
return updated_records
在这个例子中,write
方法接受两个参数:ids
是记录的ID列表,data
是包含更新数据的字典。write
方法在给定的记录上执行更新操作,并返回更新后的记录对象。