Odoo12之創建Todo應用


聲明:

本教程基於 Ruter 老師的 [Odoo基礎教程系列] ,Ruter老師教程的鏈接地址為:Odoo基礎教程系列   。

 

本章內容總結

  • 1.項目前置准備
  • 2.創建模塊,模塊的簡單配置
  • 3.model模型及模塊安裝
  • 4.創建菜單視圖
  • 5.添加應用到應用列表
  • 6.創建任務列表視圖。

 

項目初始准備

如果你的odoo環境還沒有配合好的話,請參考我的另一篇文章:win10中odoo12環境配置

在配好環境之后,如果要啟動項目,需要添加如下配置:

1.將odoo-bin文件放在odoo源碼下,如果沒有odoo-bin文件,可以將odoo源碼下的一個odoo.py文件復制並更名為odoo-bin;

2.在 odoo源碼/setup/odoo.conf中添加odoo配置,內容如下:

3.pycharm下項目啟動配置,在綠色倒三角形旁邊

4.在odoo源碼的目錄下創建一個myaddons文件夾,用來存放自己編寫的odoo應用/模塊,這里我的odoo源碼是從gitee上下載的odoo12源碼;

為了讓odoo可以檢索到我們自定義myaddons下的模塊,我們要將myaddons的路徑加入到模塊檢索路徑下

在 odoo.conf 文件下添加如下配置:

addons_path=E:\YifChanSoft\Odoo\OdooSave\odoo_gitee\odoo\addons,E:\YifChanSoft\Odoo\OdooSave\odoo_gitee\myaddons

前一個是系統模塊的路徑,后面一個是我們自定義模塊文件夾的路徑

 

Todo應用

創建模塊

在配置好環境之后,win10下執行以下命令可以創建一個應用

python odoo-bin scaffold todo myaddons

以上命令代表,在myaddons目錄下創建一個名為todo的模塊。

目錄如下:

創建好todo模塊后,我們在 __mainfest__.py 編寫模塊的清單文件:

__mainfest__.py

{
    'name': "todo",  # 應用/模塊名
    'summary': """todo task""",  # 對應用/模塊的摘要
    'description': """Todo task-list the things you need to do.""",  # 對應用/模塊的描述
    'author': "YifChan",  # 作者
    'application': True,  # 將模塊變成一個應用,可以在應用中搜索到
    'sequence': 1,  # 將應用/模塊排在所有應用/模塊的第一位
}

 

model模型及模塊安裝

在我們的todo應用中,todo任務模型要有 “待辦任務”和“已完成”兩個字段,

因此,我們在models/models.py中加入如下代碼:

models/models.py

from odoo import models, fields, api


class TodoTask(models.Model):
    _name = 'todo.task'
    _description = '待辦事項'

    name = fields.Char('描述', required=True)
    is_done = fields.Boolean('已完成?')

在models/__inti__.py中添加如下代碼:

from . import models

 

此時我們的項目已經可以在應用中被找到了

打開瀏覽器進入 http://127.0.0.1:8069 ,如果你是第一次進入的話,可能需要進行如下配置

其中各個的含義如下:

  • master password:數據庫中超級管理員的密碼
  • database name:將為你現在odoo源碼創建的pg數據庫
  • email:odoo管理員,可以不是郵箱,名字任取
  • password:odoo管理員密碼

 

填寫進入后,我們點擊頁面左上角的田字形符號,選擇參數設置,點擊右邊的 激活開發者模式,截圖如下:

不要糾結我左上角的todo,這是因為我已經裝好並配置好了,原來只有todo下面的兩列。

激活開發者模式之后,我們繼續點擊田字形符號里的應用,然后點擊導航條上的刷新本地模塊列表

這樣我們就可以在右上角的搜索框中搜索todo了,如果是模塊的話,記得叉掉應用后再查找模塊名,這里因為我們已經配置了todo為應用,所以可以直接查找,查找結果如下:

點擊安裝,然后會刷新,但是刷新后你會發現還是回到了應用頁面,並且再次搜索todo后,會顯示已安裝。

我們還不能進入todo應用頁面,這是因為我們還沒有給todo添加應用入口,下面我們來進行添加。

 

創建菜單

在views文件夾下,我們創建一個 views/todo_menus.xml 文件,並添加如下內容

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <!-- 主菜單定義 -->
        <menuitem id="menu_todo" name="Todo"/>
        <!-- 菜單動作定義 -->
        <record id="action_todo_task" model="ir.actions.act_window">
            <field name="name">待辦事項</field>
            <field name="res_model">todo.task</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
            <field name="target">current</field>
        </record>
        <!-- 子菜單定義 -->
        <menuitem action="action_todo_task" id="submenu_todo_task" name="待辦事項"
                  parent="menu_todo" sequence="10"/>
    </data>
</odoo>

將todo_menus.xml文件添加入data列表中:

__mainfest__.py

'data': [
        'views/views.xml',
        'views/templates.xml',
        'views/todo_menus.xml',
    ],

搜索模塊,點擊模塊右上角的三點,進行升級模塊。

 

注意事項

  • 在odoo中,如果你修改了xml文件,你所做的修改要升級應用后才能生效;
  • 如果你修改了py文件,要重啟項目並且升級應用后才能使修改生效;但是我個人習慣,只要修改了,就重啟項目並且升級應用。
  • 當你添加一個xml視圖文件或者權限文件后,要將文件放入應用下的__mainfest__.py文件的data列表中。
  • 當你新建了一個python相關的文件夾,要在項目下的__init__.py文件中引入文件夾;
  • 當你在應用下的某個文件夾中新建了一個要自動初始化的py文件,要在該文件夾中的__init__.py文件中引入你所添加的py文件。

以上幾點很重要,故在此統一列出,在后面可能不會再贅述,請讀者牢記。

 

添加應用到應用列表

到了上一步其實我們還是不能觀察到變化,這是因為我們還沒有添加應用到應用列表中,即左上角的田字形列表中,先展示一下效果圖:

 為了實現這個,我們要確保一下三點:

  • 1,有model模型,
  • 2,在model模型的基礎上,menu.xml中有具體子菜單項及動作
  • 3,在csv權限中有查看model的權限並將csv文件添加到data列表中

前面我們已經實現了model模型,和菜單xml,接下來我們實現第三點,

我們給security/ir.model.access.csv文件中添加如下內容:

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_todo_task,todo.task,model_todo_task,,1,1,1,1

這里是給todo.task模型賦予增刪改查的權限。

做完這個我們還要將這個文件添加到data列表中,其實只要解開該文件的注釋即可,如下:

'data': [
        'security/ir.model.access.csv',
    ],

 

重啟項目,升級模塊。

至此,我們可以點擊左上角的下拉菜單並可以點擊todo應用來進入應用,我們可以看到如下內容:

 你可以點擊創建一個任務看看。

 

創建任務列表視圖

通過上一步我們已經可以看到任務列表了,這個是系統為我們自動配置的視圖。

但是我們只能看到任務的name字段,而無法直接看見任務是否完成,此時,我們可以配置自己的視圖來按照自己的需求來顯示任務列表。

創建 views/todo_views.xml,並在其中加入如下內容

<odoo>
    <data>
        <!-- 待辦事項列表顯示視圖 -->
        <record id="todo_task_view_tree" model="ir.ui.view">
            <field name="name">todo.task.view_tree</field>
            <field name="model">todo.task</field>
            <field name="type">tree</field>
            <field name="arch" type="xml">
                <tree string="Todo">
                    <field name="name"/>
                    <field name="is_done"/>
                </tree>
            </field>
        </record>
    </data>
</odoo>

將todo_view.xml加入data列表中。

升級應用后我們可以看到如下內容:

本節內容基本到此結束了。

 

代碼匯總

todo/models/models.py

from odoo import models, fields, api


class TodoTask(models.Model):
    _name = 'todo.task'
    _description = '待辦事項'

    name = fields.Char('描述', required=True)
    is_done = fields.Boolean('已完成?')
todo/models/models.py

todo/security/ir.model.access.csv

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_todo_task,todo.task,model_todo_task,,1,1,1,1

todo/views/todo_menus.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <!-- 主菜單定義 -->
        <menuitem id="menu_todo" name="Todo"/>
        <!-- 菜單動作定義 -->
        <record id="action_todo_task" model="ir.actions.act_window">
            <field name="name">待辦事項</field>
            <field name="res_model">todo.task</field>
            <field name="view_type">form</field>
            <field name="view_mode">tree,form</field>
            <field name="target">current</field>
        </record>
        <!-- 子菜單定義 -->
        <menuitem action="action_todo_task" id="submenu_todo_task" name="待辦事項"
                  parent="menu_todo" sequence="10"/>
    </data>
</odoo>
todo/views/todo_menus.xml

todo/views/todo_views.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data>
        <!-- 配置 待辦事項列表 顯示視圖 -->
        <record id="todo_task_view_tree" model="ir.ui.view">
            <field name="name">todo.task.view_tree</field>
            <field name="model">todo.task</field>
            <field name="type">tree</field>
            <field name="arch" type="xml">
                <tree string="Todo">
                    <field name="name"/>
                    <field name="is_done"/>
                </tree>
            </field>
        </record>
    </data>
</odoo>
todo/views/todo_views.xml

todo/__mainfest__.py

{
    'name': "todo",

    'summary': """
        todo task""",

    'description': """
        Todo task-list the things you need to do.
    """,

    'author': "YifChan",
    'website': "http://www.yourcompany.com",

    # Categories can be used to filter modules in modules listing
    # Check https://github.com/odoo/odoo/blob/12.0/odoo/addons/base/data/ir_module_category_data.xml
    # for the full list
    'category': 'Uncategorized',
    'version': '0.1',

    # any module necessary for this one to work correctly
    'depends': ['base'],

    # always loaded
    'data': [
        'security/ir.model.access.csv',
        'views/views.xml',
        'views/templates.xml',
        'views/todo_menus.xml',
        'views/todo_views.xml',
    ],
    # only loaded in demonstration mode
    'demo': [
        'demo/demo.xml',
    ],
    'application': True,
    'sequence': 1,
}
todo/__mainfest__.py


免責聲明!

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



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