如何快速在odoo中創建自己的菜單

上一篇內容:如何快速創建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'
        ],
    
  • 進入應用找到自己的模塊去升級

  • 大功告成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章