--- tags: Odoo --- # Odoo 踩雷大隊 ## Icon 設定 ### 設定模組 Icon 在 `__manifest__.py` 設定屬性 icon:`"/{moduleName}/{position}"` 範例: ```json { 'icon': '/ai_bot/static/description/icon.png', } ``` ### 設定菜單 Icon menuitem屬性加上`web_icon="{moduleName},{location}"` 範例: ```xml <menuitem id="menu_km_root" name="智慧助理" sequence="10" web_icon="ai_bot,static/description/icon.png" /> ``` ## 資料附件表 `ir_attachment table` ### 用途 ### 指令 ```sql SELECT * FROM ir_attachment WHERE res_model = 'ir.ui.menu' ``` ### 範例資料 ![image](https://hackmd.io/_uploads/H1dZftWbgx.png) ### 欄位說明 ```python class ir_attachment: #模型名稱 res_model=fields.Char('Resource Model', readonly=True) #模型屬性 res_field = fields.Char('Resource Field', readonly=True) #附件名稱 name = fields.Char('Name', required=True) #附件Url url = fields.Char('Url', index='btree_not_null', size=1024) #附件的儲存檔案名 store_fname = fields.Char('Stored Filename', index=True, unaccent=False) ``` ## Xml 判斷順序依據 ### 菜單 xml #### 範例1: 在 Odoo XML 定義中,子選單的 menuitem 使用 parent 屬性來指定其父選單的 id。為了讓 Odoo 正確建立選單階層,這個父選單的 menuitem 定義必須出現在所有引用它的子選單定義之前。這樣能確保 Odoo 在處理子選單時能找到並連結到正確的父選單。 ```xml <menuitem id="menu_km_root" /> <menuitem id="menu_km_config" parent="menu_km_root" /> ``` #### 範例2: 在 Odoo 的 XML 定義中,menuitem 的 action 屬性會指向一個已定義的動作(action)的 id。為了讓選單項目能夠正確地觸發對應的功能,被呼叫的該項動作必須在引用它的 menuitem 之前就被定義完成。這樣可以確保 Odoo 在載入選單時,能夠成功連結到指定的動作並在使用者點擊選單時執行該動作。 ```xml <record id="km_path_view_action" model="ir.actions.act_window"> <field name="name">AI檔案路徑</field> <field name="res_model">km.path.config</field> <field name="view_mode">tree,form</field> </record> <menuitem parent="menu_km_config" action="km_path_view_action" /> ```