Tạo model trong Odoo
Tut 3: Tạo model trong Odoo
Bạn theo hướng dẫn ở Tut 2 để tạo dựng Odoo version 13 nha. Tiếp theo bạn theo hướng dẫn trong bài viết này để tạo model đầu tiên của mình trong Odoo. Cuối bài viết mình đính kèm source code hoàn chỉnh cho việc tạo model trong Odoo của Tut 3 này. Minh khuyến khích làm theo từng bước dành cho những bạn mới biết đến Odoo nha :).
Odoo theo kiến trúc MVC do đó bạn có thể hiểu 1 model trong Odoo tương ứng với 1 bảng trong Cơ Sở Dữ Liệu (CSDL) mà hệ quản trị CSDL Postgres lưu trữ. Trong bài viết này mình sẽ tiến hành code addon / app / module đầu tiên của chúng ta, mục đích để lưu trữ thông tin về thú cưng.
Tạo module mới
Minh sẽ tạo một folder mới tên là mypet nằm trong thư mục addons. Đồng thời, mình sẽ phải tạo thêm một số file thiết yếu cho một module:
- __manifest__.py: đây là file mô tả thông tin module "thú cưng" mới của chúng ta.
- __init__.py: cái này của Python dùng để import
- models: thư mục chứa các model trong module mypet
Bên trong thư mục models mình sẽ tạo thêm 2 file:
- models/__init__.py: cái này của Python dùng để import
- models/my_pet.py: đây là file model, sẽ chứa thông tin cần lưu trữ các thuộc tính nào cho thú cưng.
Ta cũng có thể add thêm file icon.png để module ta thêm đẹp:
- static/description/icon.png: file icon cho module, Odoo mặc định lấy tại đường dẫn này
Vậy cấu trúc thư mục cho module mới mypet sẽ trông như sau:
Mô tả thông tin module
mypet/__manifest__.py
# -*- coding: utf-8 -*-
{
'name': "My pet - minhng.info",
'summary': """My pet model""",
'description': """Managing pet information""",
'author': "minhng.info",
'website': "https://minhng.info",
'category': 'Uncategorized',
'version': '0.1',
'depends': [
'product',
],
'data': [],
# 'qweb': ['static/src/xml/*.xml'],
'installable': True,
'application': True,
}
Trong file manifest trên, một số thông tin mô tả cho module:
- name: tên module
- summary: mô tả ngắn gọn module
- description: mô tả chi tiết app module / tính năng
- author: tác giả, bạn có thể để tên của bản thân vào. Hehe.
- website: website chứa thêm thông tin của module
- category: loại module, bạn có thể tham khảo danh sách category tại đây
- version: phiên bản app
- depends: dependcy của module mình sẽ phụ thuộc vào những app / module khác nào. Ở đây Minh đặc tả "product", đây là một module built-in của Odoo. Do đó, khi cài đặt module my_pet sẽ trigger cài đặt app product.
- data: liên quan đến view, các file xml. Mình sẽ nhắc đến thông tin này ở tut tiếp theo vì nó chưa thuộc phạm vi của bài viết này, tạm thời mình để trống nó nha.
- installable: bạn cứ để True, tức cài đặt được :D
- application: khi vào menu Apps, mặc định filter "Apps" sẽ được dùng. Nếu application ta set bằng False thì nó sẽ không hiện ra khi có filter "Apps", ngược lại nó được xem như một Application. Thông tin này ta set về False khi module của chúng ta dev như một module kỹ thuật phụ trợ, cái này tùy vào tính chất module mà ta đang phát triển.
Ở file __init__.py ta phải import thư mục models vào bằng cách như sau:
mypet/__init__.py
from . import models
Tạo model trong Odoo
Tiếp theo, bên trong folder mypet/models. Bạn hiện thực như sau:
mypet/models/__init__.py
from . import my_pet
mypet/models/my_pet.py
# -*- coding: utf-8 -*-
from odoo import api, fields, models, tools, _
from odoo.exceptions import UserError, ValidationError
class MyPet(models.Model):
_name = "my.pet"
_description = "My pet model"
name = fields.Char('Pet Name', required=True)
nickname = fields.Char('Nickname')
description = fields.Text('Pet Description')
age = fields.Integer('Pet Age', default=1)
weight = fields.Float('Weight (kg)')
dob = fields.Date('DOB', required=False)
gender = fields.Selection([
('male', 'Male'),
('female', 'Female')
], string='Gender', default='male')
pet_image = fields.Binary("Pet Image", attachment=True, help="Pet Image")
owner_id = fields.Many2one('res.partner', string='Owner')
product_ids = fields.Many2many(comodel_name='product.product',
string="Related Products",
relation='pet_product_rel',
column1='col_pet_id',
column2='col_product_id')
Trong file model phía trên ta đã tạo các trường thông tin cho đối tượng thú cưng rồi đó. Minh cũng đã sử dụng khá nhiều field type khác nhau hỗ trợ trong Odoo:
- Char: text 1 dòng
- Text: textarea nhiều dòng
- Integer: số nguyên
- Float: số thực
- Date: ngày tháng năm
- Selection: chọn lựa, option
- Binary: lưu ảnh
- Many2one: quan hệ nhiều một: N-1
- Many2many: quan hệ nhiều nhiều: N-N
Cài đặt module mới
Để tiến hành cài đặt một module mới, ta phải chuyển sang developer mode. Trong Odoo 13 thì mình thêm ?debug=True vào URL để kích hoạt (xem hình dưới). Sau đó, mình nhấn vào menu "Update Apps List" (chỉ xuất hiện khi ta ở chế độ debug / developer) và chọn "Update" để module mypet mới của chúng ta xuất hiện trong list. Thao tác này chính là "refresh" lại danh sách app.
Bước cuối cùng mình nhấn nút "Install" ngay chỗ module của mình để cài đặt. Sau khi cài đặt thành công sẽ chuyển trạng thái thành "Installed" mà không báo bất cứ lỗi nào.
Vậy là chúng ta đã hoàn tất tutorial này để biết làm thế nào khởi tạo một module mới trong Odoo và đã tạo thành công model thú cưng với các trường dữ liệu mong muốn. Hiện tại do ta chưa tạo menu, view tương ứng cho model trong Odoo do đó chưa thể thấy ngay trên giao diện được. Tut 4 tiếp theo sẽ giới thiệu về View trong Odoo để làm tiếp công việc này ^^). Các bạn hãy đón đọc nhé!
Source code download: Tut 3
Chuyên mục thảo luận cho Tut 3 @ https://www.facebook.com/groups/odoo.dev/learning_content/?filter=226430075118574&post=796184507513254
- Khóa học lập trình Odoo TP.HCM: Thông tin và đăng ký khóa học
- Khảo sát nhu cầu học nghiệp vụ Odoo Offline @ HCM & đăng ký sớm: https://forms.gle/auBXLNbfuNqhJSbj8
Cài đặt Odoo:
- Docker Compose for Odoo 10
- Docker Compose for Odoo 11
- Docker Compose for Odoo 12
- Docker Compose for Odoo 13
- Docker Compose for Odoo 14
- Docker Compose for Odoo 15
- Docker Compose for Odoo 16
Danh sách bài viết series Odoo:
- Tut 0: Học lập trình Odoo - tutorials
- Tut 1: Odoo là gì?
- Tut 2: Hướng dẫn cài đặt Odoo version 10, 11, 12, 13
- Tut 3: Tạo model trong Odoo
- Tut 4: View trong Odoo
- Tut 5: Controller trong Odoo
- Tut 6: Thừa kế model trong Odoo
- Tut 7: Thừa kế view trong Odoo
- Tut 8: Thừa kế controller trong Odoo
- Tut 9: API trong Odoo - XML-RPC
- Tut 10: Hiện thực wizard trong Odoo
- Tut 11: Tạo widget trong Odoo
- Tut 12: Tạo settings trong Odoo cho custom addon
- Tut 13: Thêm button cho list/tree view trong Odoo
- Tut 14: Search, Filter, Group By trong Odoo
- Tut 15: Kết nối PostgreSQL database của Odoo bằng câu lệnh
- Tut 16: Kết nối pgAdmin vào PostgreSQL database của Odoo
Tham gia ngay group trên Facebook để cùng thảo luận với đồng bọn nhé:
- Fanpage Minh: https://www.facebook.com/minhng.info
- Khám phá Odoo: https://www.facebook.com/groups/odoo-dev
Khám phá Odoo