本文主要介紹Odoo向導Wizard如何創建並提供代碼示例
Odoo向導Wizard
在odoo中通過使用向導(Wizard)創建一個表單與用戶進行交互。向導的model使用TransientModel定義,TransientModel繼承自Model,並有下面的特殊功能
1 保存在TransientModel的記錄會在提交完成后自動清理
2 wizard記錄沒有必要指定訪問權限,默認所有用戶都可以訪問。
3 wizard記錄中的字段可以通過many2one指向wizard對象或普通的model對象, 普通的model對象不能通過many2one指向wizard對象
代碼示例
定義一個wizard,讓用戶批量的添加某節課時的上課學生
odoogoedu/wizard.py
from odoo import models, fields, api
class Wizard(models.TransientModel):
_name = 'odoogoedu.wizard'
session_id = fields.Many2one('odoogoedu.session',
string="Session", required=True)
attendee_ids = fields.Many2many('res.partner', string="Attendees")
新建的odoogoedu/wizard.py 需要導入到odoogoedu/__manifest__.py
from . import wizard
運行wizard
可以通過ir.actions.act_window模型表里的記錄發起,可以從menu里或者通過某個button觸發。另外還有一種方式,在form view上方的下拉按鈕組(上下文動作contextual actions)中調用,設置好src_model關聯 對應的model。
啟動向導
1 定義向導顯示的form視圖
2 在contextual actions中調用此向導
3 定義向導模型中session_id的默認值。通過self._context中active_id獲取,active_id為當前form的所顯示模型的id,通過模型的browse方法,就可以獲取到這個記錄的對象了。
odoogoedu/wizard.py
class Wizard(models.TransientModel):
_name = 'odoogoedu.wizard'
def _default_session(self):
return self.env['odoogoedu.session'].browse(self._context.get('active_id'))
session_id = fields.Many2one('odoogoedu.session',
string="Session", required=True, default=_default_session)
attendee_ids = fields.Many2many('res.partner', string="Attendees")
@api.multi
def subscribe(self):
self.session_id.attendee_ids |= self.attendee_ids
return {}
odoogoedu/views/views.xml
parent="odoogoedu_menu"
action="session_list_action"/>
wizard.form
odoogoedu.wizard
完善向導
完善上面的wizard,在一個wizard里操作多個課時。
odoogoedu/views/views.xml