โมดูลแรกของคุณ

ภาพรวม

บทนี้ช่วยให้คุณสร้างโมดูล Odoo แรกและปรับใช้ในโปรเจ็กต์ Odoo.sh ของคุณ

บทช่วยสอนนี้ต้องการ คุณสร้างโปรเจ็กต์บน Odoo.sh และคุณทราบ URL ของที่เก็บ Github ของคุณ

อธิบายการใช้ Git และ Github ขั้นพื้นฐานแล้ว

มีการตั้งสมมติฐานด้านล่าง:

  • ~/src คือไดเร็กทอรีซึ่งเป็นที่ตั้งของที่เก็บ Git ที่เกี่ยวข้องกับโปรเจ็กต์ Odoo ของคุณ

  • odoo คือผู้ใช้ Github

  • odoo-addons คือที่เก็บข้อมูล Github

  • feature-1 คือชื่อของสาขาการพัฒนา

  • master คือชื่อของสาขาการใช้งาน

  • my_module คือชื่อของโมดูล

แทนที่สิ่งเหล่านี้ด้วยค่าที่คุณเลือก

สร้างสาขาการพัฒนา

จาก Odoo.sh

ในมุมมองสาขา:

  • กดปุ่ม + ถัดจากขั้นตอนการพัฒนา

  • เลือกสาขา master ในรายการ Fork

  • พิมพ์ feature-1 ในอินพุต ถึง

    pic1 pic2

เมื่อสร้างบิลด์แล้ว คุณสามารถเข้าถึงตัวแก้ไขและเรียกดูโฟลเดอร์ ~/src/user เพื่อเข้าถึงโค้ดของสาขาการพัฒนาของคุณ

../../../_images/firstmodule-development-editor.png ../../../_images/firstmodule-development-editor-interface.png

จากคอมพิวเตอร์ของคุณ

โคลนพื้นที่เก็บข้อมูล Github ของคุณบนคอมพิวเตอร์ของคุณ:

$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons

สร้างสาขาใหม่:

$ git checkout -b feature-1 master

สร้างโครงสร้างโมดูล

การถอดแบบคำนวณของโมดูล

แม้ว่าจะไม่จำเป็น แต่การถอดแบบคำนวณก็ช่วยหลีกเลี่ยงความน่าเบื่อในการตั้งค่าโครงสร้างโมดูล Odoo พื้นฐานได้ คุณสามารถประกอบโมดูลใหม่ได้โดยใช้ไฟล์ปฏิบัติการ odoo-bin

จากตัวแก้ไข Odoo.sh ในเทอร์มินัล:

$ odoo-bin scaffold my_module ~/src/user/

หรือจากคอมพิวเตอร์ของคุณ หากคุณมี การติดตั้ง Odoo:

$ ./odoo-bin scaffold my_module ~/src/odoo-addons/

หากคุณไม่ต้องการรบกวนการติดตั้ง Odoo บนคอมพิวเตอร์ของคุณ คุณยังสามารถ :ดาวน์โหลด:ดาวน์โหลดเทมเพลตโครงสร้างโมดูลนี้ <first_module/my_module.zip> ซึ่งคุณจะแทนที่ 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
└── views
    ├── templates.xml
    └── views.xml

Warning

อย่าใช้อักขระพิเศษนอกเหนือจากขีดล่าง ( _ ) สำหรับชื่อโมดูลของคุณ แม้แต่เครื่องหมายยติภังค์ ( - ) ชื่อนี้ใช้สำหรับคลาส Python ของโมดูลของคุณ และการมีชื่อคลาสที่มีอักขระพิเศษอื่นที่ไม่ใช่ขีดล่างนั้นไม่ถูกต้องใน Python

ยกเลิกหมายเหตุเนื้อหาของไฟล์:

  • models/models.py ตัวอย่างของโมเดลที่มีฟิลด์

  • views/views.xml มุมมองแบบลำดับและแบบฟอร์ม โดยมีเมนูเปิดอยู่

  • demo/demo.xml บันทึกการสาธิตสำหรับโมเดลตัวอย่างข้างต้น

  • controllers/controllers.py ตัวอย่างของคอนโทรลเลอร์ที่ใช้งานบางเส้นทาง

  • views/templates.xml สองตัวอย่างมุมมอง qweb ที่ใช้โดยเส้นทางคอนโทรลเลอร์ด้านบน

  • __manifest__.py ไฟล์ Manifest ของโมดูลของคุณ รวมถึงชื่อ คำอธิบาย และไฟล์ข้อมูลที่จะโหลด คุณเพียงแค่ต้องยกเลิกหมายเหตุไฟล์ข้อมูลรายการควบคุมการเข้าถึง:

    # 'security/ir.model.access.csv',
    

ด้วยตนเอง

หากคุณต้องการสร้างโครงสร้างโมดูลด้วยตนเอง คุณสามารถปฏิบัติตามบทช่วยสอน Server framework 101 เพื่อทำความเข้าใจโครงสร้างของโมดูลและเนื้อหาของแต่ละไฟล์

พุชสาขาพัฒนา

กำหนดขั้นตอนการเปลี่ยนแปลงที่จะ commit

$ git add my_module

commit การเปลี่ยนแปลงของคุณ

$ git commit -m "My first module"

พุชการเปลี่ยนแปลงของคุณไปยังพื้นที่เก็บข้อมูลระยะไกลของคุณ

จากเทอร์มินัลตัวแก้ไข Odoo.sh:

$ git push https HEAD:feature-1

คำสั่งข้างต้นอธิบายไว้ในส่วน commit และ push การเปลี่ยนแปลงของคุณ ของบท เครื่องมือแก้ไขออนไลน์ รวมถึงคำอธิบายเกี่ยวกับข้อเท็จจริงที่คุณจะได้รับแจ้งให้พิมพ์ชื่อผู้ใช้และรหัสผ่านของคุณ และสิ่งที่ควรทำหากคุณใช้การยืนยันแบบสองขั้นตอน

หรือจากเทอร์มินัลคอมพิวเตอร์ของคุณ:

$ git push -u origin feature-1

คุณต้องระบุ -u origin features-1 สำหรับการพุชครั้งแรกเท่านั้น จากจุดนั้น คุณสามารถใช้เพื่อพุชการเปลี่ยนแปลงในอนาคตจากคอมพิวเตอร์ของคุณ

$ git push

ทดสอบโมดูลของคุณ

สาขาของคุณควรปรากฏในสาขาการพัฒนาในโปรเจ็กต์ของคุณ

../../../_images/firstmodule-test-branch.png

ในมุมมองสาขาของโปรเจ็กต์ คุณสามารถคลิกชื่อสาขาในแผงการนำทางด้านซ้ายเพื่อเข้าถึงประวัติของโปรเจ็กต์ได้

../../../_images/firstmodule-test-branch-history.png

คุณจะเห็นการเปลี่ยนแปลงที่คุณเพิ่งดำเนินการ รวมถึงความคิดเห็นที่คุณตั้งไว้ที่นี่ เมื่อฐานข้อมูลพร้อมแล้ว คุณสามารถเข้าถึงได้โดยคลิกปุ่ม เชื่อมต่อ

../../../_images/firstmodule-test-database.png

หากโปรเจ็กต์ Odoo.sh ของคุณได้รับการกำหนดค่าให้ติดตั้งโมดูลของคุณโดยอัตโนมัติ คุณจะเห็นโมดูลดังกล่าวในแอปฐานข้อมูลโดยตรง ไม่เช่นนั้น จะสามารถใช้งานได้ในแอปที่จะติดตั้ง

จากนั้นคุณสามารถลองใช้โมดูลของคุณ สร้างบันทึกใหม่และทดสอบฟีเจอร์และปุ่มต่างๆ ของคุณได้

ทดสอบกับข้อมูลการใช้งาน

คุณต้องมีฐานข้อมูลการใช้งานสำหรับขั้นตอนนี้ คุณสามารถสร้างมันขึ้นมาได้หากคุณยังไม่มี

เมื่อคุณทดสอบโมดูลของคุณในบิลด์การพัฒนาด้วยข้อมูลสาธิตและเชื่อว่าพร้อมแล้ว คุณสามารถทดสอบกับข้อมูลการใช้งานจริงได้โดยใช้สาขาการจัดเตรียม

คุณสามารถ:

  • ทำให้สาขาการพัฒนาของคุณเป็นสาขาชั่วคราว โดยการลากและวางลงบนชื่อส่วน การจัดเตรียม

    ../../../_images/firstmodule-test-devtostaging.png
  • รวมเข้ากับสาขาการจัดเตรียมที่มีอยู่ โดยการลากและวางลงในสาขาการจัดเตรียมที่กำหนด

    ../../../_images/firstmodule-test-devinstaging.png

คุณยังสามารถใช้คำสั่ง รวม git เพื่อรวมสาขาของคุณ

สิ่งนี้จะสร้างการสร้างการจัดเตรียมใหม่ ซึ่งจะทำซ้ำฐานข้อมูลที่ใช้งานจริง และทำให้มันทำงานโดยใช้เซิร์ฟเวอร์ที่อัปเดตด้วยการเปลี่ยนแปลงล่าสุดในสาขาของคุณ

../../../_images/firstmodule-test-mergedinstaging.png

เมื่อฐานข้อมูลพร้อมแล้ว คุณจะสามารถเข้าถึงได้โดยใช้ปุ่ม เชื่อมต่อ

ติดตั้งโมดูลของคุณ

โมดูลของคุณจะไม่ได้รับการติดตั้งโดยอัตโนมัติ คุณต้องติดตั้งจากเมนูแอป ที่จริงแล้ว จุดประสงค์ของการสร้างการจัดเตรียมคือ เพื่อทดสอบพฤติกรรมของการเปลี่ยนแปลงของคุณตามที่จะเกิดขึ้นกับการผลิตของคุณ และในการผลิตของคุณที่คุณไม่ต้องการให้โมดูลของคุณได้รับการติดตั้งโดยอัตโนมัติ แต่เป็นไปตามความต้องการ

โมดูลของคุณอาจไม่ปรากฏในแอปของคุณโดยตรงเพื่อติดตั้ง คุณต้องอัปเดตรายการแอปก่อน:

  • เปิดใช้งาน โหมดนักพัฒนา

  • ในเมนูแอป ให้คลิกปุ่ม อัปเดตรายการแอป

  • ในกล่องโต้ตอบที่ปรากฏขึ้น ให้คลิกปุ่ม อัปเดต

    ../../../_images/firstmodule-test-updateappslist.png

โมดูลของคุณจะปรากฏในรายการแอปที่มีอยู่

../../../_images/firstmodule-test-mymoduleinapps.png

ปรับใช้ในการใช้งาน

เมื่อคุณทดสอบโมดูลของคุณในสาขาการจัดเตรียมด้วยข้อมูลการผลิตของคุณ และเชื่อว่าโมดูลพร้อมสำหรับการผลิตแล้ว คุณสามารถรวมสาขาของคุณในสาขาการผลิตได้

ลากและวางสาขาการจัดเตรียมของคุณบนสาขาที่ใช้งานจริง

../../../_images/firstmodule-test-mergeinproduction.png

คุณยังสามารถใช้คำสั่ง รวม git เพื่อรวมสาขาของคุณ

การดำเนินการนี้จะรวมการเปลี่ยนแปลงล่าสุดของสาขาการจัดเตรียมของคุณในสาขาการผลิต และอัปเดตเซิร์ฟเวอร์ที่ใช้งานจริงของคุณด้วยการเปลี่ยนแปลงล่าสุดเหล่านี้

../../../_images/firstmodule-test-mergedinproduction.png

เมื่อฐานข้อมูลพร้อมแล้ว คุณจะสามารถเข้าถึงได้โดยใช้ปุ่ม เชื่อมต่อ

ติดตั้งโมดูลของคุณ

โมดูลของคุณจะไม่ถูกติดตั้งโดยอัตโนมัติ คุณต้องติดตั้งด้วยตนเองตามที่อธิบายไว้ใน ด้านบนส่วนเกี่ยวกับการติดตั้งโมดูลของคุณในฐานข้อมูลชั่วคราว.

เพิ่มการเปลี่ยนแปลง

ส่วนนี้จะอธิบายวิธีเพิ่มการเปลี่ยนแปลงในโมดูลของคุณโดยการเพิ่มฟิลด์ใหม่ในโมเดลและปรับใช้

จากเครื่องมือแก้ไข Odoo.sh
  • เรียกดูโฟลเดอร์โมดูลของคุณ ~/src/user/my_module,

  • จากนั้นเปิดไฟล์ models/models.py

หรือจากคอมพิวเตอร์ของคุณ
  • ใช้เบราว์เซอร์ไฟล์ที่คุณเลือกเพื่อเรียกดูโฟลเดอร์โมดูลของคุณ ~/src/odoo-addons/my_module,

  • จากนั้น เปิดไฟล์ models/models.py โดยใช้โปรแกรมแก้ไขที่คุณเลือก เช่น Atom, Sublime Text, PyCharm, vim, ...

จากนั้นหลังจากช่องคำอธิบาย

description = fields.Text()

เพิ่มช่องวันที่และเวลา

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

จากนั้น เปิดไฟล์ views/views.xml

หลังจาก

<field name="value2"/>

เพิ่ม

<field name="start_datetime"/>

การเปลี่ยนแปลงเหล่านี้จะเปลี่ยนโครงสร้างฐานข้อมูลโดยการเพิ่มคอลัมน์ในตาราง และแก้ไขมุมมองที่จัดเก็บไว้ในฐานข้อมูล

เพื่อที่จะนำไปใช้กับฐานข้อมูลที่มีอยู่ เช่น ฐานข้อมูลการใช้งานของคุณ การเปลี่ยนแปลงเหล่านี้จำเป็นต้องมีการอัปเดตโมดูล

หากคุณต้องการให้แพลตฟอร์ม Odoo.sh ดำเนินการอัปเดตโดยอัตโนมัติเมื่อคุณพุชการเปลี่ยนแปลง ให้เพิ่มเวอร์ชันโมดูลของคุณในรายการ

เปิดรายการโมดูล __manifest__.py

แทนที่

'version': '0.1',

กับ

'version': '0.2',

แพลตฟอร์มจะตรวจจับการเปลี่ยนแปลงของเวอร์ชันและเริ่มต้นการอัปเดตโมดูลเมื่อมีการปรับใช้การแก้ไขใหม่

เรียกดูโฟลเดอร์ Git ของคุณ

จากนั้น จากเทอร์มินัล Odoo.sh:

$ cd ~/src/user/

หรือจากเทอร์มินัลคอมพิวเตอร์ของคุณ:

$ cd ~/src/odoo-addons/

จากนั้น ดำเนินการเปลี่ยนแปลงเพื่อ commit

$ git add my_module

commit การเปลี่ยนแปลงของคุณ

$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"

พุชการเปลี่ยนแปลงของคุณ:

จากเทอร์มินัล Odoo.sh:

$ git push https HEAD:feature-1

หรือจากเทอร์มินัลคอมพิวเตอร์ของคุณ:

$ git push

จากนั้นแพลตฟอร์มจะสร้างโครงสร้างใหม่สำหรับสาขา feature-1

../../../_images/firstmodule-test-addachange-build.png

เมื่อคุณทดสอบการเปลี่ยนแปลงแล้ว คุณสามารถรวมการเปลี่ยนแปลงในสาขาการใช้งานได้ เช่น โดยการลากและวางสาขาบนสาขาการใช้งานในอินเทอร์เฟซ Odoo.sh เมื่อคุณเพิ่มเวอร์ชันของโมดูลในรายการ แพลตฟอร์มจะอัปเดตโมดูลโดยอัตโนมัติและฟิลด์ใหม่ของคุณจะพร้อมใช้งานโดยตรง ไม่เช่นนั้น คุณสามารถอัปเดตโมดูลภายในรายการแอปด้วยตนเองได้

ใช้ไลบรารี Python ภายนอก

หากคุณต้องการใช้ไลบรารี Python ภายนอกที่ไม่ได้ติดตั้งตามค่าเริ่มต้น คุณสามารถกำหนดไฟล์ requirements.txt ซึ่งแสดงรายการไลบรารีภายนอกที่โมดูลของคุณใช้อยู่

Note

  • ไม่สามารถติดตั้งหรืออัปเกรดแพ็คเกจระบบบนฐานข้อมูล Odoo.sh ได้ (เช่น แพ็คเกจ apt) อย่างไรก็ตาม ภายใต้เงื่อนไขเฉพาะ อาจพิจารณาบรรจุภัณฑ์สำหรับการติดตั้งได้ นอกจากนี้ยังใช้กับ โมดูล Python ที่ต้องการแพ็คเกจระบบสำหรับการคอมไพล์ และ โมดูล Odoo บุคคลที่สาม

  • ส่วนขยาย PostgreSQL ไม่รองรับบน Odoo.sh

  • หากต้องการข้อมูลเพิ่มเติม โปรดดู คำถามที่พบบ่อยของเรา

แพลตฟอร์มจะใช้ไฟล์นี้เพื่อติดตั้งไลบรารี Python ที่โปรเจ็กต์ของคุณต้องการโดยอัตโนมัติ

ฟีเจอร์นี้อธิบายไว้ในส่วนนี้โดยใช้ ไลบรารี Unidecode ในโมดูลของคุณ

สร้างไฟล์ requirements.txt ในโฟลเดอร์รูทของที่เก็บข้อมูลของคุณ

จากโปรแกรมแก้ไข 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)

การเพิ่มการพึ่งพา Python จำเป็นต้องเพิ่มเวอร์ชันโมดูลเพื่อให้แพลตฟอร์มติดตั้งได้

แก้ไขรายการโมดูล __manifest__.py

แทนที่

'version': '0.2',

กับ

'version': '0.3',

Stage และ commit การเปลี่ยนแปลงของคุณ:

$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"

จากนั้น พุชการเปลี่ยนแปลงของคุณ:

ในเทอร์มินัล Odoo.sh:

$ git push https HEAD:feature-1

ในเทอร์มินัลคอมพิวเตอร์ของคุณ:

$ git push