สร้างโมดูล¶
ก่อนที่จะสร้างโมดูลแรกของคุณ จำเป็นต้อง สร้างโปรเจกต์ Odoo.sh และทราบ URL ของ GitHub repository ของคุณ
อภิธานศัพท์
~/srcคือไดเรกทอรีที่เก็บ Git repositories ที่เกี่ยวข้องกับโปรเจกต์ Odoo ของคุณodooคือผู้ใช้ GitHubodoo-addonsคือ GitHub repositoryfeature-1คือชื่อของบรานช์สำหรับพัฒนาmainคือชื่อของบรานช์โปรดักชันmy_moduleคือชื่อของโมดูล
แทนที่สิ่งเหล่านี้ตามความจำเป็น
สร้างสาขาการพัฒนา¶
จาก มมุมองสาขา:
ในแผงนำทางสาขา คลิกปุ่ม + (สาขาพัฒนาใหม่) ถัดจาก พัฒนา
ภายใต้ แยก เลือกสาขา
mainภายใต้ ไปยัง ป้อน
feature-1
เมื่อการสร้างพร้อมแล้ว คุณสามารถเข้าถึง เครื่องมือแก้ไข และโค้ดของสาขาพัฒนาของคุณจากโฟลเดอร์ ~/src/user
โคลนที่เก็บ GitHub ของคุณบนคอมพิวเตอร์โดยรันคำสั่งต่อไปนี้:
mkdir ~/src cd ~/src git clone https://github.com/odoo/odoo-addons.git cd ~/src/odoo-addons
สร้างสาขาใหม่โดยรัน:
git checkout -b feature-1 main
สร้างโครงสร้างโมดูล¶
การสร้างโครงสร้างโมดูล¶
แม้ว่าจะไม่จำเป็น แต่การสร้างโครงสร้างโมดูลช่วยหลีกเลี่ยงความน่าเบื่อในการตั้งค่าโครงสร้างโมดูล Odoo พื้นฐาน คุณสามารถสร้างโครงสร้างโมดูลใหม่โดยใช้ไฟล์ปฏิบัติการ odoo-bin
จากเทอร์มินัล เครื่องมือแก้ไข รัน:
odoo-bin scaffold my_module ~/src/user/
เมื่อ ติดตั้ง Odoo บนคอมพิวเตอร์ของคุณแล้ว รัน:
./odoo-bin scaffold my_module ~/src/odoo-addons/
Tip
หากคุณไม่ต้องการติดตั้ง Odoo บนคอมพิวเตอร์ของคุณ คุณยังสามารถ ดาวน์โหลดเทมเพลตโครงสร้างโมดูลนี้ แทนที่ my_module ทุกแห่งด้วยชื่อที่คุณเลือก
โครงสร้างด้านล่างจะถูกสร้างขึ้น:
my_module
├── __init__.py
├── __manifest__.py
├── controllers
│ ├── __init__.py
│ └── controllers.py
├── demo
│ └── demo.xml
├── models
│ ├── __init__.py
│ └── models.py
├── security
│ ├── ir.model.access.csv
│ └── models.py
└── views
├── templates.xml
└── views.xml
Warning
ใช้เฉพาะอักขระตัวอักษรและตัวเลข (a-z, 0-9) หรือขีดล่าง (_) เมื่อตั้งชื่อโมดูลของคุณ เนื่องจากชื่อของมันถูกใช้สำหรับคลาส Python และชื่อคลาสที่มีอักขระพิเศษอื่นนอกจากขีดล่างไม่ถูกต้องใน Python
ยกเลิกการแสดงความคิดเห็นไฟล์ต่อไปนี้:
models/models.pyตัวอย่างของโมเดลพร้อมฟิลด์views/views.xmlมมุมองแบบทรีและแบบฟอร์ม พร้อมเมนูที่เปิดมุมมองเหล่านั้นdemo/demo.xmlระเบียนสาธิตสำหรับโมเดลตัวอย่างcontrollers/controllers.pyan example of a controller implementing some routesviews/templates.xmltwo example qweb views used by the controller routes__manifest__.pythe manifest of your module, including its title, description and data files to load. Uncomment the access control list data file:# 'security/ir.model.access.csv',
ด้วยตนเอง¶
To create your module structure manually, follow the Server framework 101 tutorial to understand the structure of a module and the content of each file.
Push on the development branch¶
Stage the changes to be committed by running:
git add my_module
Commit your changes by running:
git commit -m "My first module"Push your changes to your remote repository by running:
จากเทอร์มินัล เครื่องมือแก้ไข รัน:
git push https HEAD:feature-1
Run:
git push -u origin feature-1
It is only necessary to specify
-u origin feature-1the first time you push. After that, run:git push
Test the module¶
The branch should appear under the Development section of the Branches view navigation panel.
Click the branch name to view its history, including the changes you just pushed. Once the database is ready, click Connect to access it.
If your Odoo.sh project is configured to automatically install the module, it will appear directly on the database dashboard. Otherwise, it will be available for installation under the Apps app.
ทดสอบกับข้อมูลการใช้งาน¶
Note
A production database is required for this step. If you do not have one yet, create it.
Once you have tested the module in a development build with the demo data and believe it is ready, you can test it with the production data using a staging branch.
คุณสามารถ:
แปลงสาขาการพัฒนาของคุณเป็นสาขา staging โดยการลากและวางลงในส่วน Staging
รวมเข้ากับสาขา staging ที่มีอยู่โดยการลากและวางลงบนสาขานั้น
ใช้คำสั่ง
git mergeเพื่อรวมสาขาของคุณ
การดำเนินการนี้จะสร้าง staging build ใหม่ที่ทำสำเนาฐานข้อมูลการใช้งานจริงและรันบนเซิร์ฟเวอร์ที่อัปเดตด้วยการเปลี่ยนแปลงล่าสุดของสาขาคุณ
เมื่อฐานข้อมูลพร้อมแล้ว ให้คลิก Connect เพื่อเข้าถึง
ติดตั้งโมดูล¶
ติดตั้งโมดูลจากแอป Apps เนื่องจากโมดูลอาจไม่ปรากฏในรายการแอปโดยตรง ให้อัปเดตรายการแอปโดยเปิดใช้งาน developer mode และคลิก
Note
โมดูลจะไม่ถูกติดตั้งโดยอัตโนมัติ เนื่องจากวัตถุประสงค์ของ staging build คือการทดสอบพฤติกรรมของการเปลี่ยนแปลงของคุณเหมือนกับที่จะเป็นบนฐานข้อมูลการใช้งานจริง ดังนั้นคุณจะไม่ต้องการให้โมดูลถูกติดตั้งโดยอัตโนมัติ
ปรับใช้ในการใช้งาน¶
เมื่อคุณทดสอบโมดูลในสาขา staging กับข้อมูลการใช้งานจริงแล้วและเชื่อว่าพร้อมสำหรับการใช้งานจริง คุณสามารถรวมสาขาของคุณเข้ากับสาขาการใช้งานจริงโดย:
ลากและวางสาขา staging ลงบนสาขาการใช้งานจริง
ใช้คำสั่ง
git mergeเพื่อรวมสาขาของคุณ
การดำเนินการนี้จะรวมการเปลี่ยนแปลงล่าสุดจากสาขา staging เข้ากับสาขาการใช้งานจริงและอัปเดตเซิร์ฟเวอร์การใช้งานจริงด้วยการเปลี่ยนแปลงเหล่านั้น
เมื่อฐานข้อมูลพร้อมแล้ว ให้คลิก Connect เพื่อเข้าถึง
ติดตั้งโมดูล¶
ติดตั้งโมดูลจากแอป Apps เนื่องจากโมดูลอาจไม่ปรากฏในรายการแอปโดยตรง ให้อัปเดตรายการแอปโดยเปิดใช้งาน developer mode และคลิก
เพิ่มการเปลี่ยนแปลง¶
ส่วนนี้อธิบายวิธีเพิ่มการเปลี่ยนแปลงในโมดูลของคุณโดยการเพิ่มฟิลด์ใหม่ในโมเดลและทำการ deploy
จาก editor หรือจากคอมพิวเตอร์ของคุณ ให้เปิดโฟลเดอร์โมดูล
~/src/odoo-addons/my_moduleจากนั้นเปิดไฟล์models/models.pyเพื่อแก้ไข หลังจากฟิลด์ description:description = fields.Text()
เพิ่มฟิลด์ datetime:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
เปิดไฟล์
views/views.xmlและหลังจาก:<field name="value2"/>
เพิ่ม:
<field name="start_datetime"/>
การเปลี่ยนแปลงเหล่านี้จะเปลี่ยนแปลงโครงสร้างฐานข้อมูลโดยการเพิ่มคอลัมน์ในตารางและแก้ไขมุมมอง เพื่อให้ถูกนำไปใช้กับฐานข้อมูลที่มีอยู่ เช่น ฐานข้อมูลการใช้งานจริงของคุณ การเปลี่ยนแปลงเหล่านี้จำเป็นต้องอัปเดตโมดูล หากคุณต้องการให้การอัปเดตดำเนินการโดยอัตโนมัติโดยแพลตฟอร์ม Odoo.sh เมื่อคุณ push การเปลี่ยนแปลง ให้เพิ่มเวอร์ชั่นของโมดูลใน manifest โดยการเปิด
__manifest__.pyและแทนที่:'version': '0.1',
ด้วย:
'version': '0.2',
แพลตฟอร์มจะตรวจพบการเปลี่ยนแปลงเวอร์ชั่นและเริ่มการอัปเดตโมดูลเมื่อมีการปรับใช้รีวิชันใหม่
ถัดไป พุชการเปลี่ยนแปลง
เมื่อคุณ:ref:
ทดสอบการเปลี่ยนแปลงของคุณแล้ว <odoo-sh/module/test-module>คุณสามารถผสานการเปลี่ยนแปลงเหล่านั้นเข้ากับบรานช์ production ได้ เช่น ด้วยการลากและวางบรานช์ลงบนบรานช์ production ในอินเทอร์เฟซ Odoo.sh เนื่องจากคุณได้เพิ่มเวอร์ชั่นโมดูลใน manifest แล้ว แพลตฟอร์มจะอัปเดตโมดูลโดยอัตโนมัติ และฟิลด์ใหม่ของคุณจะพร้อมใช้งานทันที มิฉะนั้น คุณสามารถ:ref:`อัปเดตโมดูล <odoo-sh/module/deploy/install>`ด้วยตนเองภายในรายการแอปได้
ใช้ไลบรารี Python ภายนอก¶
หากคุณต้องการใช้ไลบรารี Python ภายนอกที่ไม่ได้ติดตั้งโดยค่าเริ่มต้น คุณสามารถกำหนดไฟล์ requirements.txt ที่แสดงรายการไลบรารีภายนอกที่โมดูลของคุณต้องการใช้ แพลตฟอร์มจะใช้ไฟล์นี้เพื่อติดตั้งไลบรารี Python ที่โปรเจกต์ของคุณต้องการโดยอัตโนมัติ
Note
ไม่สามารถติดตั้งหรืออัปเกรดแพ็กเกจระบบบนฐานข้อมูล Odoo.sh ได้ (เช่น แพ็กเกจ apt) อย่างไรก็ตาม ภายใต้เงื่อนไขเฉพาะ แพ็กเกจสามารถพิจารณาเพื่อการติดตั้งได้ สิ่งนี้ใช้กับโมดูล Python ที่ต้องการแพ็กเกจระบบสำหรับการคอมไพล์และโมดูล Odoo จากบุคคลที่สามด้วย
ส่วนขยาย PostgreSQL ไม่รองรับบน Odoo.sh ดังนั้นจึงไม่สามารถติดตั้งส่วนขยาย (เช่น PostGIS, ltree, ...) ในฐานข้อมูล Odoo.sh ได้
ตัวอย่างเช่น เพื่อใช้ ไลบรารี Unidecode ในโมดูลของคุณ:
สร้างไฟล์
requirements.txtในโฟลเดอร์รากของ repository ของคุณ:จากเอดิเตอร์ Odoo.sh สร้างและเปิดไฟล์
~/src/user/requirements.txtจากคอมพิวเตอร์ของคุณ สร้างและเปิดไฟล์
~/src/odoo-addons/requirements.txt
เพิ่มในไฟล์:
unidecode
ตอนนี้คุณสามารถใช้ไลบรารีในโมดูลของคุณได้แล้ว เช่น เพื่อลบเครื่องหมายเสียงออกจากตัวอักษรในฟิลด์ชื่อของโมเดลของคุณ ในการทำเช่นนี้ ให้เปิดไฟล์
models/models.pyและก่อน:from odoo import models, fields, api
เพิ่ม:
from unidecode import unidecode
หลัง:
start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
เพิ่ม:
@api.model def create(self, values): if 'name' in values: values['name'] = unidecode(values['name']) return super(my_module, self).create(values) def write(self, values): if 'name' in values: values['name'] = unidecode(values['name']) return super(my_module, self).write(values)
เพิ่มเวอร์ชั่นโมดูลเพื่อติดตั้ง dependency ของ Python โดยแก้ไข manifest ของโมดูล
__manifest__.pyจากนั้น พุชการเปลี่ยนแปลง
Tip
สเตจไฟล์
requirements.txtโดยรันgit add requirements.txt