สวัสดีครับ วันนี้ผมจะมาพูดถึง Odoo เว็บแอปสำเร็จรูปที่ใช้จัดการส่วนต่างๆ ในบริษัท
ตัวของ Odoo มีโมดูลพื้นฐานมาให้อยู่แล้วเช่น โมดูลการขาย การซื้อ การผลิต สต๊อกสินค้า บัญชี
แต่เราสามารถที่จะดัดแปลงเพิ่มเติมเองได้
เราสามารถสร้างโมดูลเองได้ จากไฟล์ odoo-bin
odoo@odoo ~ $ ./odoo-bin scaffold name destination
- 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'})
Top comments (1)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.