DEV Community

Perm Chao
Perm Chao

Posted on • Edited on

Odoo 101

สวัสดีครับ วันนี้ผมจะมาพูดถึง Odoo เว็บแอปสำเร็จรูปที่ใช้จัดการส่วนต่างๆ ในบริษัท

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

เราสามารถสร้างโมดูลเองได้ จากไฟล์ odoo-bin

odoo@odoo ~ $ ./odoo-bin scaffold name destination 
Enter fullscreen mode Exit fullscreen mode
  • name ให้ใส่เป็นชื่อของโมดูลเรา
  • destination ให้ใส่เป็นที่ตั้งโฟลเดอร์เรา

หลังจากนั้นถ้าลองเข้าไปดูในโฟล์เดอร์ที่เราสร้างจะพบว่ามีไฟล์และโฟล์เดอร์ประมาณนี้

  • init.py

กำหนดว่าเราจะเอาไฟล์ python ไหนไปใช้งานจริงบ้าง

  • manifest.py

กำหนดข้อมูลของแอปเรา
กำหนดว่าเราจะเอาไฟล์ไหนไปใช้งานจริงบ้าง ที่ไม่ใช่ไฟล์ Python

  • data/

ข้อมูลที่เราจะใส่เข้าไปในฐานข้อมูลทุกครั้งหลังจากการอัพเดทฐานข้อมูล ข้อมูลในนี้ถูกเก็บในรูปของ xml หรือ csv ก็ได้เพราะฉะนั้น เมื่อมีการเปลี่ยนฐานข้อมูล ข้อมูลเหล่านี้จะไม่หาย

  • models/

เก็บไฟล์ Python ที่ไว้กำหนดรูปแบบลักษณะของข้อมูล (class)
ตัว Odoo ไม่อยากให้เราสร้างหรือแก้ไขตารางหรือข้อมูลโดยตรงกับฐานข้อมูลดังนั้น
ทุกครั้งที่เราสร้าง class ไว้ในไฟล์ Python ตัว odoo จะแปลง class นั้นเป็นตารางในฐานข้อมูลให้อัตโนมัติ

นอกจากนั้นไฟล์ Python ในนี้ยังใช้ใส่ Business Logic อีกด้วย

  • controllers/

เก็บไฟล์ Python ที่เป็น class เหมือนกับโฟล์เดอร์ model แต่ใช้งานคนละแบบ
ส่วนใหญ่ใช้สำหรับการกำหนด URL

  • views/

เก็บรูปแบบการแสดงผลในแบบต่างๆ

  • static/

เก็บไฟล์ที่ไว้สำหรับเรียกใช้งานจากที่ไหนก็ได้ เช่น css, js, images


ในตอนแรก เราจะเจาะจงไปที่การสร้าง Model ก่อน

# api -> เป็นเครื่องมือช่วยเชื่อมต่อฟังก์ชั่นที่เราเขียนกับ field from odoo import api # fields -> เครื่องมือช่วยสร้าง fields from odoo import fields # models -> สิ่งที่เราจะสืบทอดมันมา from odoo import models """ ใน models นั้นจะมีแยกย่อยออกเป็นประเภทต่างๆ การใช้งานก็จะเป็นคนละแบบ - AbstractModel จะได้ทุกคุณสมบัติของความเป็น model - Model แบบที่เราจะใช้ในครั้งนี้ โมเดลแบบนี้จะเน้นสำหรับ class ที่ต้องการบันทึกข้อมูลลงฐานข้อมูลเก็บไว้ - TransientModel โมเดลแบบ Pop up ข้อมูลจะถูกลบเองอัตโนมัติ """ class SaleOrder(models.Model) # ถ้าเป็น model ใหม่ให้ใส่ชื่อ ชื่อนี้จะถูกนำไปเป็น ชื่อตารางในฐานข้อมูล  # _name = ''  # หากเราต้องการสืบทอด Class ที่มีอยู่แล้ว ไม่ต้องใส่ _name  _inherit = 'sale.order' # ต่อไปเราจะสร้าง field ให้กรอกข้อมูล  new_name = fields.Char('New name from inherit') state = fields.Selection([ ['draft', 'Draft'], ['confirm', 'Confirmed'], ], string='Status') # ฟังก์ชั่นในคลาส  @api.multi def confirm(self): for rec in self: rec.write({'state': 'confirm'}) 
Enter fullscreen mode Exit fullscreen mode

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.