環境
odoo-14.0.post20221212.tar
Actions(動作)
action定義系統回應用戶操作的行為:登錄、操作按鈕、選擇發票等…
action可以存盤在資料庫中,也可以作為字典直接回傳,例如按鈕方法,所有Action都有兩個強制屬性:
-
type當前Action的類別,決定可以使用哪些欄位以及如何解釋action
-
nameaction的名稱,在客戶端的界面中顯示對action的簡短用戶可讀描述
Bindings(系結)
除了兩個強制屬性外,所有action有用于在任意模型的背景關系選單中顯示動作的可選屬性:
-
binding_model_id指定action系結的模型,格式:
moduleName.modelName,注解對于“Server Actions”,請使用model_id -
binding_type指定系結的型別,主要是放置action的背景關系選單
-
action(默認)設定Action將出現在系結模型的
Action背景關系選單, -
report設定Action將出現在系結模型的
Print背景關系選單,
-
-
binding_view_types以逗號分隔的視圖型別串列,即Action需要顯示的背景關系選單所在的視圖,主要是“串列”和“表單”,默認為
list,form(串列和表單)
Window Actions (ir.actions.act_window)
最常見的動作型別,用于通過視圖呈現模型的可視化:Window Action為模型定義了一組視圖型別(以及可能的特定視圖)(以及可能特定的模型記錄),
包含欄位:
-
res_modelaction觸發的要顯示的視圖關聯的模型
-
views(view_id,view_type)對的串列,每對視圖的第二個元素是視圖的類別(tree,form,graph, ……),第一個元素是可選的資料庫id(或False),如果未提供id,則客戶端應獲取所請求模型的指定型別的默認視圖(這由fields_view_get()自動完成),串列的第一種型別是默認視圖型別,在執行操作時默認打開,每個視圖型別在串列中最多應出現一次,當action配置如下時,打開的依舊是tree視圖,也就說view_mode似乎是如下文所述,type為ir.actions.act_window的情況下,被忽略了,不起作用{ 'type': 'ir.actions.act_window', 'views': [[False, "tree"], [False, "form"]], 'view_mode': 'form', #... } -
res_id(可選)如果默認視圖為
form,指定需要加載的記錄(否則創建一個條新記錄) -
search_view_id(可選)(id, name)對,id為動作需要加載的指定搜索視圖的資料庫ID,默認獲取模型的默認搜索視圖, -
target(可選)視圖是否應在主內容區域(
current)、以全屏模式(fullscreen)或對話框/彈出視窗(new)中打開,使用main而不是current以清除導航面包屑(實際發現,使用current會導致面導航面包屑不斷重復,形如 顧客資訊/匯入記錄/顧客資訊/匯入資料/...),默認為new, -
context(可選)傳遞給視圖的附加背景關系
-
domain(可選)隱式添加到所有視圖搜索查詢的過濾domain
-
limit(可選)默認情況下要在串列中顯示的記錄數,在web客戶端中默認為80
-
name(可選),action名稱,界面顯示時拼接到當前面包屑導航(現有導航面包屑 /name值),默認值為“Unnamed”,注意:如果name值為空字串,則默認為Unnamed
例如,要使用串列和表單視圖打開客戶(設定了customer標志的partner):
{
"type": "ir.actions.act_window",
"res_model": "res.partner",
"views": [[False, "tree"], [False, "form"]],
"domain": [["customer", "=", true]],
}
或者在新對話框中打開特定產品的表單視圖(單獨獲取):
{
"type": "ir.actions.act_window",
"res_model": "product.product",
"views": [[False, "form"]],
"res_id": a_product_id,
"target": "new",
}
另一個例子,在當前頁面中打開estate.customer模塊的默認串列視圖
{
'type': 'ir.actions.act_window',
'name': _('匯入資料'),
'res_model': 'estate.customer',
'views': [[False, "tree"]],
'view_mode': 'tree',
'context': self._context,
'target': 'main'
}
參考連接:
https://www.odoo.com/documentation/14.0/zh_CN/developer/howtos/web.html?highlight=do_action#the-action-manager
在資料庫window action中,操作有幾個不同的欄位,這些欄位應被客戶端忽略,主要用于組成view串列
-
view_mode(默認=tree,form)以逗號分隔的視圖型別串列,格式為字串(注意不要包含空格),所有這些型別都必須在生成的
views串列中(至少有一個Falseview_id) -
view_idsM2M(技術上不是M2M:添加了一個
sequence欄位,可以只由一個視圖型別組成,沒有視圖id) to view objects,定義views的初始內容,注解:Act_window視圖也可以通過
ir.actions.Act_window.view干凈地定義,如果您計劃為模型允許多個視圖,優先使用ir.actions.cact_window.wiew而不是view_idsaction,<record model="ir.actions.act_window.view" id="test_action_tree"> <field name="sequence" eval="1"/> <field name="view_mode">tree</field> <field name="view_id" ref="view_test_tree"/> <field name="act_window_id" ref="test_action"/> </record> -
view_id添加到
views串列中的特定視圖,以防其型別是view_mode串列的一部分,并且尚未由view_ids中的某個視圖填充
這些主要用于從資料檔案定義action:
<record model="ir.actions.act_window" id="test_action">
<field name="name">A Test Action</field>
<field name="res_model">some.model</field>
<field name="view_mode">graph</field>
<field name="view_id" ref="my_specific_view"/>
</record>
將使用“my_specific_view”視圖,即使這不是模型的默認視圖,
views序列的服務器端組成如下:
- 從
view_ids獲取每個(id, type)(按sequence排序) - 如果定義了
view_id,并且其型別尚未被填充,則追加其(id,type) - 對于
view_mode中的每個未填充型別,追加(False,type)
應用實踐舉例
在estate模塊的estate.property模型的表單視圖中,為Action添加選單"選取offers",如下:

action配置:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="action_demo_wizard" model="ir.actions.act_window">
<field name="name">選取offers</field>
<field name="res_model">demo.wizard</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<field name="binding_model_id" ref="estate.model_estate_property"/>
<field name="binding_view_types">form</field>
</record>
</data>
</odoo>
參考連接
https://www.odoo.com/documentation/14.0/zh_CN/developer/reference/addons/actions.html
作者:授客
微信/QQ:1033553122
全國軟體測驗QQ交流群:7156436
Git地址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額隨意,您的支持將是我繼續創作的源動力,打賞后如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟體測驗交流QQ群
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/545094.html
標籤:Python
上一篇:讀Java性能權威指南(第2版)筆記03_ Java SE API技巧中
下一篇:python--高級語法
