DEV Community

Permpoon Chaowanaphunphon
Permpoon Chaowanaphunphon

Posted on • Updated 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

Discussion (1)

Collapse
songwutk profile image
songwutk

ช่วยอธิบายเกี่ยวกับ @api เพิ่มอีกนิดครับ มันคืออะไร ต้องใส่อะไรลงไปบ้าง
multi ใช้กรณีไหน?