odoo跳转页面总结

发布时间 2023-09-26 17:36:51作者: CrossPython

odoo跳转页面总结

odoo视图跳转我总结为一下几点:
1. 默认的封装了两个数据,不需要人工维护

模型名称(封装到即将跳转的视图的context的active_model属性中)
单据id(封装到即将跳转的视图的context的active_id属性中)

2. 返回了一个字典(两大作用)

第一个作用:
各种参数的配置指定要跳转的模型,以及跳转之后模型可做的操作,就比如说显示不显示编辑保存按钮之类的。

第二个作用:
传入context,进行视图之间参数值的交互。

3. 在所跳转之后的视图接收数据并进行渲染

所以,第一步是系统默认,不需要写
第二步如下:
触发函数指定将要跳转的页面

一般情况下跳转视图的必要参数(当然,name属性非必要)

def jump_to_page(self):
	# self.env.ref是获取xml的id
	view_id = self.env.ref('dy_stock.dy_picking_in_view_form').id
	_defaults = {
		'name': _('XXX单'), # 可以写一些描述性的语言作为视图标题
        'type': 'ir.actions.act_window', # 动作类型,默认为ir.actions.act_window
        'view_type': 'form', # 跳转时打开的视图类型
        'view_mode': 'tree,form', # 列出跳转过去允许使用的视图模式
        'context': '{'name': self.name}', # 给定的参数传递
        'target': 'current', # 有两个参数,current是在当前视图打开,new是弹出一个窗口打开
        'res_model': 'stock.picking', # 参考的模型名称
        'res_id': 'views_form', # 加载指定id的视图,但只在view_type为form时生效,若没有这个参数则会新建一条记录
        'view_id': view_id, # 指定视图的id,如果一个模块只有一个视图的时候可以忽略不计,但建议最好写入
        'views': [(view_id, 'form')], # 是一个(view_id,view_type) 的元组对列表,默认打开第一组的动作视图
    }

  

下面是我总结的基本上所有参数,可以查阅浏览

def jump_to_page(self):
	# self.env.ref是获取xml的id
	view_id = self.env.ref('dy_stock.dy_picking_in_view_form').id
	_defaults = {
		'name': _('XXX单'), # 可以写一些描述性的语言作为视图标题
        'type': 'ir.actions.act_window', # 动作类型,默认为ir.actions.act_window
        'view_type': 'form', # 跳转时打开的视图类型
        'view_mode': 'tree,form', # 列出跳转过去允许使用的视图模式
        'context': {'name': self.name}, # 给定的参数传递
        'limit': 80, # 如果是tree,指定一页所能显示的行数
        'target': 'current', # 有两个参数,current是在当前视图打开,new是弹出一个窗口打开
        'auto_refresh': 0, # 为1时在视图中添加一个刷新功能
        'auto_search':True, # 加载默认视图后,自动搜索
        'multi': False, # 视图中有个更多按钮时,若multi设为True, 按钮显示在tree视图,否则显示在form视图
        'res_model': 'stock.picking', # 参考的模型名称
        'res_id': 'views_form', # 加载指定id的视图,但只在view_type为form时生效,若没有这个参数则会新建一条记录
        'view_id': view_id, # 指定视图的id,如果一个模块只有一个视图的时候可以忽略不计,但建议最好写入
        'views': [(view_id, 'form')], # 是一个(view_id,view_type) 的元组对列表,默认打开第一组的动作视图
        'flags': {'initial_mode': 'edit'}, # 对视图面板进行一些设置,如{'form': {'action_button': True, 'options': {'mode': 'edit'}}}即对form视图进行的一些设置,action_buttons为True时调出编辑保存按钮,options’: {‘mode’: ‘edit’}时则打开时对默认状态为编辑状态
    }

  

第三步如下:
前端接收一些必要的参数并进行渲染
取出其他参数的信息格式

self.env.context.get('参数名称', False)

  

def get_context_values(self):
    active_model = self.env.context.get('active_model', False) # 获取跳转之前的视图模型
    active_id = self.env.context.get('active_id', False) # 获取跳转之前的单据id
    if active_model and active_id: # 很显然,当有值的时候,说明是从其他页面跳转过来的
        context_info = self.env[active_model].browse(active_id) # 取出跳转时传入的原视图的self信息