DEV Community

loading...

Odoo 101

Permpoon Chaowanaphunphon
Hello, I'm practicing to be full stack developer.
Updated on ・1 min read

สวัสดีครับ วันนี้ผมจะมาพูดถึง 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 ใช้กรณีไหน?