iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
Odoo

30天就算 0 基礎,也能使用 GenAI 創造簡單的 Odoo 模組應用系列 第 25

【Day25】用 GenAI 重做去年鐵人賽 Odoo 圖書館系統 【~Day10】

  • 分享至 

  • xImage
  •  

終於該出動魔法了!補齊及確認前面的知識後,我們來看看如何用 GenAI 來做我以前寫的圖書館模駔。
[Day10] 圖書館管理系統 Security Groups+實作data model

這邊是我在 ChatGPT 4o 下的指令

我現在要用 Odoo 17 製作一個  書籍購買租借平台,首先從 Odoo 的 Model 開始,請創造

Library 的模組
Model 是 Books
書籍的 Field 資訊包含
* 書籍名稱
* ISBN
* 書本型態 (紙本、電子書、其他)
* 書籍描述
* 書籍庫存
* 台幣價格
* 平均評分
* 出版日期
* 最後被租借日期
* 是否可被租借
* 封面圖片

1. 定義模組結構

在 Odoo 17 中,每個模組都需要有一個標準的結構。首先,建立一個新的 Odoo 模組,稱為 library. 可以使用 Odoo scaffolding 工具來生成模組骨架:

odoo scaffold library /path/to/odoo/addons

2. 定義 Model (books.py)

接著,在 models 資料夾中,創建一個 books.py 檔案,定義 Books model。該 model 包含你所提到的字段。

from odoo import models, fields

class Books(models.Model):
    _name = 'library.books'
    _description = 'Library Books'

    name = fields.Char(string='Book Name', required=True)
    isbn = fields.Char(string='ISBN')
    book_type = fields.Selection([
        ('paper', 'Paper'),
        ('ebook', 'E-Book'),
        ('other', 'Other')],
        string='Book Type', default='paper')
    description = fields.Text(string='Description')
    stock = fields.Integer(string='Stock')
    price_twd = fields.Float(string='Price (TWD)')
    average_rating = fields.Float(string='Average Rating', digits=(2, 2))
    publish_date = fields.Date(string='Publish Date')
    last_rent_date = fields.Datetime(string='Last Rent Date')
    rentable = fields.Boolean(string='Rentable', default=True)
    cover_image = fields.Binary(string='Cover Image')

字段解釋:

  • name: 書籍名稱(必填)。
  • isbn: 書籍的 ISBN。
  • book_type: 書本型態(紙本、電子書、其他),使用 Selection。
  • description: 書籍描述。
  • stock: 書籍庫存。
  • price_twd: 台幣價格。
  • average_rating: 平均評分,保留兩位小數。
  • publish_date: 出版日期。
  • last_rent_date: 最後被租借的日期。
  • rentable: 是否可被租借。
  • cover_image: 封面圖片,使用 Binary 字段來存放圖像。

3. 建立 manifest.py

在模組根目錄下編輯 manifest.py,來引入這個 model。

{
    'name': 'Library Management',
    'version': '1.0',
    'category': 'Library',
    'summary': 'Manage library books, purchases, and rentals',
    'description': 'A module to manage a library\'s book inventory and rental system.',
    'depends': ['base'],
    'data': [
        'security/ir.model.access.csv',
        'views/book_views.xml',
    ],
    'application': True,
}

4. 定義視圖 (book_views.xml)

在 views 資料夾中,創建 book_views.xml,用來定義書籍的後台界面:

<odoo>
    <record id="view_book_form" model="ir.ui.view">
        <field name="name">library.books.form</field>
        <field name="model">library.books</field>
        <field name="arch" type="xml">
            <form string="Book">
                <sheet>
                    <group>
                        <field name="name"/>
                        <field name="isbn"/>
                        <field name="book_type"/>
                        <field name="description"/>
                        <field name="stock"/>
                        <field name="price_twd"/>
                        <field name="average_rating"/>
                        <field name="publish_date"/>
                        <field name="last_rent_date"/>
                        <field name="rentable"/>
                        <field name="cover_image" widget="image"/>
                    </group>
                </sheet>
            </form>
        </field>
    </record>

    <record id="view_book_tree" model="ir.ui.view">
        <field name="name">library.books.tree</field>
        <field name="model">library.books</field>
        <field name="arch" type="xml">
            <tree string="Books">
                <field name="name"/>
                <field name="isbn"/>
                <field name="book_type"/>
                <field name="stock"/>
                <field name="price_twd"/>
                <field name="average_rating"/>
                <field name="publish_date"/>
                <field name="last_rent_date"/>
                <field name="rentable"/>
            </tree>
        </field>
    </record>
</odoo>

定義權限 (ir.model.access.csv)

確保用戶有權限訪問這個 model。你需要定義一個 .csv 文件來提供這個權限。

在 security/ir.model.access.csv 中,加入以下內容:

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_library_books,access_library_books,model_library_books,,1,1,1,1

小結

當然沒有完全一模一樣,有了 GenAI 當然要多做一點啦,但你會發現,最重要的是你要將敘述及專有名詞使用正確,那結果也會更容易預測及成功,當然最怕的就是出問題的時候,這是你一定要有些基礎才會容易解決問題,也是我寫這系列文章的用意,接下來繼續來玩擴充了!


上一篇
【Day24】Odoo 模組結構( __manifest__.py):用途與電商實踐範例
下一篇
【Day26】使用 GenAI 補上圖書館模組的缺陷:以實例來實驗 GenAI 環境下的策略
系列文
30天就算 0 基礎,也能使用 GenAI 創造簡單的 Odoo 模組應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言