Tạo model trong Odoo

  Nov 30, 2019      2m
   

Tut 3: Tạo model trong Odoo

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:

odoo module structure

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.

odoo 13 debug mode

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.

odoo 13 installed

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


Cài đặt Odoo:

Danh sách bài viết series Odoo:

Tham gia ngay group trên Facebook để cùng thảo luận với đồng bọn nhé: