如何快速在odoo中建立自己的選單

FANDX發表於2021-04-13

上一篇內容:如何快速建立odoo模組,使用腳手架快速建立自己的odoo應用app

前言

在上一個教程中,我們已經實現了對模組的建立,現在我們要對建立的模組新增內容,這個教程將教你如何在odoo選單中建立自己的選單

image

建立ORM模型

因為odoo在選單到檢視顯示的都是資料的內容,如果沒有模型類的支援,選單也不能正常顯示,所以我們為了實現功能,先簡單做一個brands的品牌表

  • 進入models->models.py檔案寫入內容

    from odoo import models, fields, api
    
    
    class Brands(models.Model):
        """
        品牌資料表
        """
        # 資料庫的名稱,名稱為fandx_brands,這裡的點會在資料庫中轉換成_
        _name = "fandx.brands"
    		
        # 定義一個char型別欄位,string為描述資訊,在view檢視中會顯示
        name = fields.Char(string="品牌名稱")
    
  • 在Navicat中的展示

image

  • 這裡會發現除了我們自己建立的name欄位以外還有幾個欄位這裡是繼承了AbstractModel自動建立的,並且所有的表在建立的時候都會建立這幾個欄位,如果有需要可以繼承這個模型進行建立

    • id欄位:主鍵欄位
    • create_uid欄位:建立使用者的uid
    • create_date欄位:資料的建立時間
    • write_uid欄位:上一次更新的使用者uid
    • write_date欄位:上一次更新的時間

建立選單檢視

  • 在views資料夾下建立menutem.xml檔案

    <odoo>
        <menuitem name="FANDX倉庫" id="fandx_stock.menu_root"/>
        <menuitem name="品牌管理" id="fandx_stock.menu_1" parent="fandx_stock.menu_root" action="brand_action"/>
        <menuitem name="型號管理" id="fandx_stock.menu_2" parent="fandx_stock.menu_root" action="brand_action"/>
        <menuitem name="SKU管理" id="fandx_stock.menu_3" parent="fandx_stock.menu_root" action="brand_action"/>
    </odoo>
    
    • menuitem標籤:為建立選單的標籤
    • name屬性:就是在選單顯示的內容
    • id屬性:id標識,這裡是唯一的即可
    • parent屬性:父級,我們在下面定義parent就可以將下面3個子選單定位在id為fandx_stock.menu_root的頁面中了
    • action屬性:動作,必須制定到對於的act_windows檢視上,沒有指定則頁面不會顯示這個選單功能
  • 在views中建立brand.xml檔案

    <odoo>
      <record id="brand_action" model="ir.actions.act_window">
          <field name="name">品牌管理</field>
          <field name="type">ir.actions.act_window</field>
          <field name="res_model">fandx.brands</field>
          <field name="view_mode">tree,form</field>
      </record>
    </odoo>
    
    • record標籤:語法標準,必須要寫在最外面
    • id屬性:id標識,這裡是唯一的即可
    • model屬性:xml會繼承IrActionsActWindow的動作模型,odoo會根據模型來渲染檢視,我們每一個view都要設定一個基礎的act_windows檢視
    • field->name="name":定義頁面的左上角顯示內容
    • field->name="type":型別
    • field->name="res_model":act_windows對應渲染的模型,這裡寫上我們之前定義的fandx.brands模型即可
    • field->name="view_mode":需要渲染的型別,這裡先定義tree檢視和form檢視
  • 在_manifest_.py中剛建立的兩個檢視

     # 載入的檢視
        'data': [
            '....',
            'views/brand.xml',
            'views/menuitem.xml'
        ],
    
    • 這裡要注意順序,選單檢視一定要放在最後,act_windows檢視放在選單檢視的上面
  • 這個時候你如果去應用中升級了自己的模組,你會發現並沒有在左側選單中顯示,因為我們沒有對資料模型進行許可權的配置,odoo會預設認為我們的使用者沒有讀取的許可權

  • 進入security->ir.model.access.csv檔案中替換下面程式碼

    id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
    access_fandx_stock_fandx_brands,fandx_stock.fandx_brands,model_fandx_brands,base.group_user,1,1,1,1
    
    • id: 唯一標識,必須唯一
    • name: 描述名稱,描述資訊
    • model_id:id:model的id格式是 model_模型類名
    • group_id:id : group組的id,這裡可以不填,或者寫上自己的定義的使用者組,以後的教程裡會詳細講解group組的許可權分配問題
    • perm_read:檢視 1有許可權,0無許可權,下面的一樣的
    • perm_write:修改
    • perm_create: 建立
    • perm_unlink: 刪除
  • 然後在data中開啟對應的許可權檔案的遮蔽

      # 載入的檢視
        'data': [
            'security/ir.model.access.csv',
            'views/brand.xml',
            'views/menuitem.xml'
        ],
    
  • 進入應用找到自己的模組去升級

  • 大功告成

相關文章