Tải bản đầy đủ (.pdf) (28 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (850.76 KB, 28 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:
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)
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)
4
1. GIỚI THIỆU VỀ ORM
4
ORM là gì?
 ORM (Object Relation
Mapping) là kĩ thuật ánh xạ từ
mô hình hướng đối tượng
xuống CSDL quan hệ.


 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.
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
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 đó.
7
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
7
 Nếu chúng ta đang ở bên trong đối tượng thì thể hiện
của nó chính là self
 Nếu muốn tạo ra 1 thể hiện của một đối tượng khác.
Chúng ta dùng lệnh
self.pool.get('ten_doi_tuong')
VD: chúng ta đang ở đối tượng x_sinhvien nhưng lại
muốn thực hiện phương thức test_method() ở đối
tượng x_khoa. Ta thực hiện lệnh
self.pool.get(x_khoa').test_method()
8
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
8
 Một số tham số thường dùng trong ORM
Tên tham
số
Ý nghĩa
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 }
9
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
9
 Một số phương thức thường dùng trong Odoo
Tên p.thức Ý nghĩa
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)
10
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
10
2.1. Browse
 Input
- ID hoặc danh sách các ID của các record chúng ta cần
truy xuất
 Output
- Các record ở dạng đối tượng hoặc một list các record
ở dạng đối tượng
 Cú pháp
- browse(cr, uid, ids,context=context)

11
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
11
2.1. Browse
 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
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
12
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
12
2.2. Read
 Input
- ID hoặc danh sách các ID của đối tượng chúng ta cần
truy xuất các trường (field) của đối tượng cần lấy ra
 Output
- 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)
13

2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
13
2.2. Read
 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
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
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
15
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
15
2.3. Create
 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
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
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.
 Output
- True/False
 Cú pháp
- write(cr, uid, ids, vals, context=context)
17
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
17
2.4. Write
 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
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)
18
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
18
2.5. Unlink
 Input
- ID hoặc danh sách các ID của record chúng ta muốn
xóa
 Output
- True/False
 Cú pháp
- unlink(cr, uid, ids, context=context)
19
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
19
2.5. Unlink
 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
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)
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).
 Output
- True/False
 Cú pháp
- copy(cr, uid, id, defaults, context=context)
21
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
21
2.6. Copy
 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
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 = 15
defaults = {'diachi':'Nguyễn Khoái'}
nganh_obj.copy(cr, uid, id, defaults, context=context)

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), '|', '!'
23
2. PHƯƠNG THỨC ORM THƯỜNG DÙNG
23
2.7. Search
 Output
- Danh sách ID của các record phù hợp với các tiêu chí
tìm kiếm (nếu count=False hoặc không có count)
- [24,5,15,53]
 Cú pháp
- search(cr, uid, args, [option input,] context=context)
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'),
(‘id','in',[10,11])])
25
2. OVERRIDE CÁC PHƯƠNG THỨC TRONG ORM
25
2.7. Search

×