iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

今天我們來學習設計管理者使用介面介面,編輯我們的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。


上一篇
[Day23] 用 JSON-RPC 實作客戶端 App: 實務上我會使用 OdooRPC
下一篇
[Day25] 不同使用情境,不同的資料呈現形式
系列文
Odoo 魔法學院: 一步一腳印帶你成為客製化大師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言