終於該出動魔法了!補齊及確認前面的知識後,我們來看看如何用 GenAI 來做我以前寫的圖書館模駔。
[Day10] 圖書館管理系統 Security Groups+實作data model
這邊是我在 ChatGPT 4o 下的指令
我現在要用 Odoo 17 製作一個 書籍購買租借平台,首先從 Odoo 的 Model 開始,請創造
Library 的模組
Model 是 Books
書籍的 Field 資訊包含
* 書籍名稱
* ISBN
* 書本型態 (紙本、電子書、其他)
* 書籍描述
* 書籍庫存
* 台幣價格
* 平均評分
* 出版日期
* 最後被租借日期
* 是否可被租借
* 封面圖片
在 Odoo 17 中,每個模組都需要有一個標準的結構。首先,建立一個新的 Odoo 模組,稱為 library. 可以使用 Odoo scaffolding 工具來生成模組骨架:
odoo scaffold library /path/to/odoo/addons
接著,在 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')
字段解釋:
在模組根目錄下編輯 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,
}
在 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>
確保用戶有權限訪問這個 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 當然要多做一點啦,但你會發現,最重要的是你要將敘述及專有名詞使用正確,那結果也會更容易預測及成功,當然最怕的就是出問題的時候,這是你一定要有些基礎才會容易解決問題,也是我寫這系列文章的用意,接下來繼續來玩擴充了!