今天我們來學習設計管理者使用介面介面,編輯我們的form view,讓操作更明確。
我們將繼續使用library_checkout附加模組,增添使用者介面。
先幫我們設置頂層選單,在library_checkout/views/library_menu.xml
<menuitem id="menu_library_checkout"
name="Checkout"
action="action_library_checkout"
parent="library_app.library_menu"
/>
在library_checkout/views/library_menu.xml:
(view_mode為可使用的的view types)
<record id="action_library_checkout" model="ir.actions.act_window">
<field name="name">Checkouts</field>
<field name="res_model">library.checkout</field>
<field name="view_mode">tree,form,activity, calendar,graph,pivot</field>
</record>
另外針對Action Menu增添功能,讓我們點選Send Message能再開新視窗。
到wizard/checkout_mass_message_wizard_view.xml,運用binding_model_id指定要使用的model跟binding_view_types來限制特定類型的可見性,target new 是在開啟新視窗。
<record id="action_checkout_message"
model="ir.actions.act_window">
<field name="name">Send Messages</field>
<field name="res_model">
library.checkout.massmessage</field>
<field name="view_mode">form</field>
<field name="binding_model_id"
ref="model_library_checkout" />
<field name="binding_view_types">form,list</field>
<field name="target">new</field>
</record>
再來是設計使用者介面,新增從checkout到done的狀態,到library_checkout/views/check_view.xml:
<header>
<field name="state" invisible="True" />
<button name="button_done"
type="object"
string="Return Books"
attrs="{'invisible':
[('state', 'in', ['new', 'done', 'cancel'])]}"
states="open"
class="oe_highlight"/>
<field name="stage_id" widget="statusbar"
options="{'clickable': True, 'fold_field': 'fold'}" />
</header>
還要能正確的呼叫,在library_checkout/models/library_checkout.py
def button_done(self):
tage = self.env["library.checkout.stage"]
done_stage = Stage.search([("state", "=", "done")],
limit=1)
for checkout in self:
checkout.stage_id = done_stage
return True
再來設計主表單,先到library_checkout/models/library_checkout.py新增幾個欄位:
name = fields.Char(string="Title")
member_image = fields.Binary(related=
"member_id.image_128")
再到library_checkout/views/check_view.xml,使用擴展附加欄位:
<sheet>
<div name="button_box" class="oe_button_box" />
<field name="member_image" widget="image"class="oe_avatar" />
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name"/></h1>
<h3>
<span class="oe_read_only">By </span>
<label for="member_id" class="oe_edit_only"/>
<field name="member_id" class="oe_inline" />
</h3>
</div>
</sheet>
然後我們會使用group來組織表單內容:
<group name="group_top" col="4">
<field name="request_date" />
<field name="user_id" />
<span colspan="2" />
<field name="close_date" />
</group>
我們也可以新增一些View field屬性,這些大多都有預設,也可以自行修改:
可以控制這些字段分別在編輯模式或讀取模式才能看到:
class="oe_edit_only" or class="oe_read_only"
<label for="name" class="oe_edit_only" />
另外web端也能使用特定工具呈現,像是文字就能使用email在電子郵件訊息的內文包含寄回電子郵件連結或是url 將文字轉成可點擊的URL。