iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
Odoo

利用【AI】工具,聰明進行 Odoo 程式開發系列 第 6

Day6:個案一:學校圖書管理(2)-依【使用者故事1】由ChatGPT產生所有程式碼

  • 分享至 

  • xImage
  •  

使用者故事

請依使用者故事
作為一名圖書管理員,我希望能在系統中新增、編輯和刪除書籍資料,包括書名、作者、ISBN、分類和庫存數量,以便精確管理館藏。

這是第一個使用者故事
請協助產生模組對應的model view
並且提供清晰的目錄結構

ChatGPT 產生之內容

1. Addon 的目錄結構

library_management/
├── __init__.py
├── __manifest__.py
├── models/
│   ├── __init__.py
│   ├── library_book.py
│   └── library_book_category.py
├── views/
│   ├── library_book_views.xml
│   └── library_book_category_views.xml
└── security/
    └── ir.model.access.csv

2. __init__.py

library_management/__init__.py

from . import models

library_management/models/__init__.py

from . import library_book
from . import library_book_category

3. __manifest__.py

這個檔案定義了模組的基本資訊,包括名稱、描述、所依賴的模組等。

library_management/__manifest__.py

{
    'name': 'Library Management',
    'version': '1.0',
    'category': 'Library',
    'summary': 'Manage books and categories in a library.',
    'depends': ['base'],
    'data': [
        'security/ir.model.access.csv',
        'views/library_book_views.xml',
        'views/library_book_category_views.xml',
    ],
    'installable': True,
    'application': True,
}

4. 模型檔案

library_book.py

這個檔案定義了 library.book 模型。

library_management/models/library_book.py

from odoo import models, fields

class LibraryBook(models.Model):
    _name = 'library.book'
    _description = 'Library Book'

    name = fields.Char(string='Book Title', required=True)
    author = fields.Char(string='Author', required=True)
    isbn = fields.Char(string='ISBN', required=True)
    category_id = fields.Many2one('library.book.category', string='Category')
    stock_qty = fields.Integer(string='Stock Quantity', required=True)
    description = fields.Text(string='Description')

library_book_category.py

這個檔案定義了 library.book.category 模型。

library_management/models/library_book_category.py

from odoo import models, fields

class LibraryBookCategory(models.Model):
    _name = 'library.book.category'
    _description = 'Book Category'

    name = fields.Char(string='Category Name', required=True)
    description = fields.Text(string='Description')

5. 視圖檔案

library_book_views.xml

這個檔案定義了 library.book 模型的視圖。

library_management/views/library_book_views.xml

<odoo>
    <record id="view_library_book_tree" model="ir.ui.view">
        <field name="name">library.book.tree</field>
        <field name="model">library.book</field>
        <field name="arch" type="xml">
            <tree>
                <field name="name"/>
                <field name="author"/>
                <field name="isbn"/>
                <field name="category_id"/>
                <field name="stock_qty"/>
            </tree>
        </field>
    </record>

    <record id="view_library_book_form" model="ir.ui.view">
        <field name="name">library.book.form</field>
        <field name="model">library.book</field>
        <field name="arch" type="xml">
            <form>
                <sheet>
                    <group>
                        <field name="name"/>
                        <field name="author"/>
                        <field name="isbn"/>
                        <field name="category_id"/>
                        <field name="stock_qty"/>
                    </group>
                    <group>
                        <field name="description"/>
                    </group>
                </sheet>
            </form>
        </field>
    </record>

    <record id="action_library_book" model="ir.actions.act_window">
        <field name="name">Books</field>
        <field name="res_model">library.book</field>
        <field name="view_mode">tree,form</field>
    </record>

    <menuitem id="menu_library_root" name="Library"/>
    <menuitem id="menu_library_books" name="Books" parent="menu_library_root" action="action_library_book"/>
</odoo>

library_book_category_views.xml

這個檔案定義了 library.book.category 模型的視圖。

library_management/views/library_book_category_views.xml

<odoo>
    <record id="view_library_book_category_tree" model="ir.ui.view">
        <field name="name">library.book.category.tree</field>
        <field name="model">library.book.category</field>
        <field name="arch" type="xml">
            <tree>
                <field name="name"/>
                <field name="description"/>
            </tree>
        </field>
    </record>

    <record id="view_library_book_category_form" model="ir.ui.view">
        <field name="name">library.book.category.form</field>
        <field name="model">library.book.category</field>
        <field name="arch" type="xml">
            <form>
                <sheet>
                    <group>
                        <field name="name"/>
                        <field name="description"/>
                    </group>
                </sheet>
            </form>
        </field>
    </record>

    <record id="action_library_book_category" model="ir.actions.act_window">
        <field name="name">Book Categories</field>
        <field name="res_model">library.book.category</field>
        <field name="view_mode">tree,form</field>
    </record>

    <menuitem id="menu_library_categories" name="Categories" parent="menu_library_root" action="action_library_book_category"/>
</odoo>

6. 權限檔案

security/ir.model.access.csv

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_library_book,access.library.book,model_library_book,,1,1,1,1
access_library_book_category,access.library.book.category,model_library_book_category,,1,1,1,1

7. 使用說明

  1. 新增 library_management 資料夾:在您的 Odoo 模組目錄中新增 library_management 資料夾。
  2. 放置檔案:將上述的 models/, views/, security/__init__.py, __manifest__.py 檔案放置在相對應的資料夾中。
  3. 安裝模組:在 Odoo 中啟用開發者模式,進入應用列表,點擊 "更新應用列表",然後安裝 Library Management 模組。

這樣的結構使模型、視圖和安全性更加清晰,模組可擴展性更強。

將上述步內容逐一實現

1.依 Addon 的目錄結構建立

https://ithelp.ithome.com.tw/upload/images/20240919/20102255uzBjBaXoG3.jpg

2.貼上 __init__.py 內容

https://ithelp.ithome.com.tw/upload/images/20240919/201022555Q6tsqun93.jpg

3.貼上 __manifest__.py 內容

https://ithelp.ithome.com.tw/upload/images/20240919/20102255OOVIvdrRyT.jpg

4.貼上 模型檔案 內容

https://ithelp.ithome.com.tw/upload/images/20240919/20102255R9BlXbkCvu.jpg

5.貼上 視圖檔案 內容

https://ithelp.ithome.com.tw/upload/images/20240919/20102255rW4SgOkTSZ.jpg

6.貼上 權限檔案 內容

https://ithelp.ithome.com.tw/upload/images/20240919/20102255f0Z68joO2E.jpg

7. 使用說明

先在odoo.conf加入addons的路徑

addons_path =odoo-17.0\addons,odoo-17.0\odoo\addons,addons

以【工作目錄】來定義各模組位置

https://ithelp.ithome.com.tw/upload/images/20240919/20102255yy6KnfFTr8.jpg

進入開發者模式

https://ithelp.ithome.com.tw/upload/images/20240919/20102255POp7zYDLki.jpg

更新模組列表

https://ithelp.ithome.com.tw/upload/images/20240919/20102255pioUZKvzJR.jpg!

蒐尋 library_management 安裝模組(啓動)

https://ithelp.ithome.com.tw/upload/images/20240919/20102255gNJpYfFc9K.jpg

成功安裝 library_management 晝面

https://ithelp.ithome.com.tw/upload/images/20240919/20102255dsh4wHIE7G.jpg

本節結語

上述的ChatGPT的內容,皆一行未調整的狀況,直接複製貼上至Pycharm且安裝至odoo17執行無誤,証明ChatGPT確實可協助程式人員進行開發,而不是單純的補完程式碼,後續有更複雜的運用,皆是透過對談的方式由ChatGPT思考及產生程式碼,敬請期待


上一篇
Day5:個案一:學校圖書管理(1) 整體情境及架構
下一篇
Day7:個案一:學校圖書管理(3)-將模組繁體中文化
系列文
利用【AI】工具,聰明進行 Odoo 程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言