如何快速在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'
        ],
    
  • 進入應用找到自己的模塊去升級

  • 大功告成

下一篇內容:odoo視圖入門學習- tree視圖的使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM