1. Trang chủ
  2. » Giáo án - Bài giảng

(yenbao1340@gmail.com) Lập trình Odoo (OpenERP) Phần 4: Các phương thức ORM trong Odoo

28 1,9K 23

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 850,76 KB

Nội dung

Lập trình OdooOpenERP Phần 4: Các phương thức ORM trong OdooOpenERPHướng dẫn sử dụng cơ bản các phương thức ORM trong OdooOpenERP bao gồm các phương thức như read, write, create, search, unlinkPHương pháp override các phương thức trên

Trang 1

LAB_4 ORM METHOD

MÃ NGUỒN MỞ

TRƯỜNG ĐẠI HỌC NGUYỄN TẤT THÀNH

KHOA CÔNG NGHỆ THÔNG TIN

Hướng dẫn: Nguyễn Yên Bảo Điện thoại:

Email: nybao@ntt.edu.vn

Trang 2

NỘI DUNG

2

1. Giới thiệu về ORM

2. Các phương thức thường dùng trong ORM

3. Override các phương thức trong ORM

4. Những cải tiến trong Odoo (v8)

Trang 3

NỘI DUNG

3

1. Giới thiệu về ORM

2. Các phương thức thường dùng trong ORM

3. Override các phương thức trong ORM

4. Những cải tiến trong Odoo (v8)

Trang 4

1 GIỚI THIỆU VỀ ORM

 Cho phép thao tác trên table

trong CSDL mà không cần phải quan tâm nhiều đến việc viết các câu truy vấn cho mỗi lần truy xuất CSDL

Trang 5

1 GIỚI THIỆU VỀ ORM

5

 Ưu điểm

 Độc lập hệ quản trị cơ sở dữ liệu

 Cung cấp các API đơn giản – dễ dùng

 Giúp cho bản thiết kế gần gũi với lập trình viên

 Nhược điểm

 Các ORM thường tự sinh ra SQL để select, insert, update, delete…  khó can thiệp sâu để tối ưu hóa  Ảnh hưởng đến hiệu suất

 Cấu trúc bảng bên dưới sẽ phức tạo nếu lạm dụng việc kế thừa quá nhiều

 Khó khăn trong việc quản lý session

Trang 6

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

6

 Odoo framework hỗ trợ rất nhiều phương thức giúp

chúng ta tương tác với CSDL cũng như thực hiện 1 số chức năng mở rộng

 Các đối tượng trong Odoo được thừa kế từ lớp osv.osv nên các đối tượng này đều thừa kế tất cả các phương thức ORM

 Chúng ta có thể gọi đến các phương thức này ngay

bên trong đối tượng; hoặc có thể tạo ra một thể hiện của đối tượng, rồi sau đó gọi các phương thức này từ các thể hiện đó

Trang 7

self.pool.get( x_khoa' ).test_method()

Trang 8

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

cr kết nối cơ sở dữ liệu (con trỏ csdl)

uid id của người dùng đang thao tác (current id)

id hoặc

ids

là một list chứa các id của các bản ghi; hoặc là 1 số nguyên duy nhất khi chỉ có một id.

context là một dictionaries chứa các tham số về ngữ cảnh như: ngôn

ngữ sử dụng là gì, múi giờ là gì, model nào đang đang được

sử dụng, id là bao nhiêu Hoặc chúng ta có thể thêm các ngữ cảnh để xử lý trong 1 số trường hợp cụ thể

Ví dụ: {'lang': 'en_US', ‘khongdcxoa’:True }

Trang 9

Browse Trả về các bản ghi (record) ở dạng đối tượng hoặc một list các

đối tượng; cho phép truy xuất tới từng trường (field) hoặc các

quan hệ của đối tượng bằng cách dùng kí pháp dấu '.'

Read Lấy ra 1 số field đã chỉ định trong các record được truyền vào

(Tương đương với SQL: SELECT cot1,cot2 FROM model WHERE id=…)

Create Tạo ra một bản ghi mới với giá trị được truyền vào (tương

đương với button CreateSave trên giao diện hoặc lệnh INSERT trong SQL)

Write Cập nhật thông tin cho các bản ghi có id trong danh sách ids

được truyền vào ( với button EditSave hoặc lệnh UPDATE) Unlink Xóa các bản ghi có id nằm trong danh sách ids được truyền vào Search Tìm 1 số bản ghi thỏa mãn các điều kiện mà chúng ta truyền vào Copy Tạo bản sao của một bản ghi; một số trường sẽ lấy giá trị mặc

định mà ta đã định sẵn ( với button Duplicate)

Trang 10

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

Trang 11

Giả xử chúng ta đang thực hiện code trong đối tượng x_sinhvien

- Thực hiện bên trong đối tượng

ids = [1,2,3,4,5]

dssinhvien = self.browse(cr, uid, ids, context=context)

print dssinhvien[0].masv

print dssinhvien[1].nganh.id

- Thực hiện cho các đối tượng bên ngoài

nganh_obj = self.pool.get( 'x_nganh' )

nganh_ids = [9,10]

dsnganh = self.browse(cr, uid, nganh_ids, context=context)

print dsnganh[0].manganh

Trang 12

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

- Một list các dictionary với key là tên trường, và value

là giá trị của các trường cần lấy

- [{'name' : 'bao' , 'tuoi' : 24 },{ 'name' : 'minh' , 'tuoi' : 25 }]

 Cú pháp

- read(cr, uid, ids, list_field, context=context)

Trang 13

Giả xử chúng ta đang thực hiện code trong đối tượng x_sinhvien

- Thực hiện bên trong đối tượng

read_sv = self.read(cr,uid,ids,[ 'masv' , 'name' , 'gioitinh' ])

print read_sv[0]['name' ]

- Thực hiện cho các đối tượng bên ngoài

nganh_obj = self.pool.get( 'x_nganh' )

read_nganh=nganh_obj.read(cr,uid,nganh_ids,

['manganh' , 'name' , 'gioitinh' ])

print dsnganh[0].manganh

Trang 14

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

14

2.3 Create

 Input

- Một dictionary các record mà chúng ta muốn thêm vào

- Với key là tên field và value là giá trị của field

 Output

- ID của record vừa tạo

 Cú pháp

- create(cr, uid, vals, context=context)

- Với vals là 1 dictionary

Trang 15

Giả xử chúng ta đang thực hiện code trong đối tượng x_sinhvien

- Thực hiện bên trong đối tượng

vals = {'mssv' : '1000' , 'name':'nguyễn yên bảo' } new_id = self.create(cr,uid,vals,context=context)

print new_id

- Thực hiện cho các đối tượng bên ngoài

nganh_obj = self.pool.get( 'x_nganh' )

vals = {'msnganh' : '2000' , 'name':'CNTT' }

nganh_id = nganh_obj.create(cr,uid,vals,context=context)

print nganh_id

Trang 16

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

16

2.4 Write

 Input

- ID hoặc danh sách các ID của record cần cập nhật

- Một dictionaries với key là tên field cần cập nhật và values là các giá trị mới cần cập nhật

Trang 17

Giả xử chúng ta đang thực hiện code trong đối tượng x_sinhvien

- Thực hiện bên trong đối tượng

ids = [ 4 , 5 ]

vals = {'gioitinh' : 'nam' } self.write(cr,uid,ids,vals,context=context)

- Thực hiện cho các đối tượng bên ngoài

nganh_obj = self.pool.get( 'x_nganh' )

ids = [10,15]

vals = {‘name' : ‘Quản trị kinh doanh' } nganh_obj.write(cr,uid,ids,vals,context=context)

Trang 18

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

Trang 19

Giả xử chúng ta đang thực hiện code trong đối tượng x_sinhvien

- Thực hiện bên trong đối tượng

ids = [ 4 , 5 ]

self.unlink(cr, uid, ids, context=context)

- Thực hiện cho các đối tượng bên ngoài

nganh_obj = self.pool.get( 'x_nganh' )

ids = [10,15]

nganh_obj.unlink(cr, uid, ids, context=context)

Trang 20

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

20

2.6 Copy

 Input

- ID của record cần nhân bản (Chỉ có 1 ID)

- Một dictionaries với key là tên field và key là giá trị mặc định Sau khi copy thì các trường dữ liệu sẽ có giá trị giống như bản cũ, chỉ khác ở các field mà ta đã chỉ ra trong dictionaries (defaults)

Trang 21

Giả xử chúng ta đang thực hiện code trong đối tượng x_sinhvien

- Thực hiện bên trong đối tượng

defaults = { 'nganh' : 10 }

id = 12 self.copy(cr, uid, id, defaults,context=context)

- Thực hiện cho các đối tượng bên ngoài

nganh_obj = self.pool.get( 'x_nganh' )

id = 1 5

defaults = { 'diachi' : 'Nguyễn Khoái' } nganh_obj.copy(cr, uid, id, defaults, context=context)

Trang 22

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

22

2.7 Search

 Input

- args: một list các tuple chứa các tiêu chí tìm kiếm

['|' , ( 'id' , 'in' , [ 1 , 2 , 3 ]), ( 'name' , 'like' , 'Nguyễn%' )]

- Các option input

• offset: bắt đầu lấy các record từ vị trí nào

• limit: giới hiện số lượng các record trả về

• order: sắp xếp thứ tự các record

• count: nếu True, trả về số lượng record được tìm

thấy (Không trả về ids)

• Các toán tử: =, !=, >, >=, <, <=, like, ilike, in, not in, child_of, parent_left, parent_right

• Các toán tử kết hợp: '&' (mặc định), '|', '!'

Trang 24

2 PHƯƠNG THỨC ORM THƯỜNG DÙNG

24

2.7 Search

Ví dụ

Giả xử chúng ta đang thực hiện code trong đối tượng x_sinhvien

- Thực hiện bên trong đối tượng

all_sv_ids = self.search(cr,uid,ids,[],context=context) order_name = self.search(cr,uid,ids,[],order='name desc' )

top10_mssv = self.search(cr,uid,ids,[],order='mssv asc' ,limit= 10 )

bao_name = self.search(cr,uid,ids,['name' , 'like' , '%Bảo' ])

bao_name_id = self.search(cr,uid,ids,['|', ( 'name' , 'like' , '%Bảo'),

Trang 25

2 OVERRIDE CÁC PHƯƠNG THỨC TRONG ORM

25

2.7 Search

Trang 26

4 Q/A

Trang 27

27

1 Xây dựng module “quản lý sinh viên”:

2 Mô tả:

 Có bao nhiêu đối tượng (sinh viên, khoa, ngành…)

 Thuộc tính của từng đối tượng

5 BÀI TẬP

Trang 28

The End.

Ngày đăng: 11/07/2015, 20:39

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w