Quan hệ giữa các mô hình

Một phần của tài liệu Tìm hiểu ODOO FRAMEWORK và xây dựng ứng dụng thương mại điện tử WEBSITE EPIC furniture (báo cáo cuối kì đồ án 1) (Trang 162 - 167)

III. Xây dựng mô-đun – Building modules

4. Quan hệ giữa các mô hình

Bản ghi từ mô hình có thể liên quan đến bản ghi từ mô hình khác. Ví dụ: bản ghi lệnh bán hàng có liên quan đến bản ghi khách hàng có chứa dữ liệu máy khách; nó cũng liên quan đến hồ sơ dòng đơn đặt hàng bán hàng của nó.

Bài tập

Tạo mô hình phiên

Đối với mô-đun Học viện mở, chúng tôi xem xét một mô hình cho các phiên: một phiên là

sự xuất hiện của một khóa học được dạy tại một thời điểm nhất định cho một đối tượng nhất định.

Tạo mô hình cho phiên. Một phiên có tên, ngày bắt đầu, thời gian và số lượng chỗ ngồi.

Thêm một hành động và một mục menu để hiển thị chúng. Làm cho mô hình mới hiển thị thông qua mục menu.

Trường quan hệ

Các trường quan hệ liên kết các bản ghi, một trong hai mô hình tương tự (cấu trúc phân cấp) hoặc giữa các mô hình khác nhau.

Các loại trường quan hệ là:

Many2one(other_model, ondelete='set null')

Một liên kết đơn giản đến một đối tượng khác: print foo.other_id.name

See also foreign keys

One2many(other_model, related_field)

Một mối quan hệ ảo, nghịch đảo của Many2one. One2many hoạt động như một vùng chứa các bản ghi, truy cập nó dẫn đến một tập hợp các bản ghi (có thể trống) :

for other in foo.other_ids: print other.name

Nguy hiểm

Bởi vì One2many là một mối quan hệ ảo, phải có một trườngMany2one trong

other_model và tên của nó phải được related_field

Many2many(other_model)

Mối quan hệ nhiều hai chiều, bất kỳ bản ghi nào ở một bên đều có thể liên quan đến bất kỳ số lượng bản ghi nào ở phía bên kia. Hoạt động như một vùng chứa các bản ghi, truy cập nó cũng dẫn đến một tập hợp các bản ghi có thể trống:

for other in foo.other_ids: print other.name

Bài tập

Các mối quan hệ Many2one

Sử dụng nhiều - một, sửa đổi các mô hình Khóa học và Phiên để phản ánh mối quan hệ

của họ với các mô hình khác:

● Một khóa học có người dùng có trách nhiệm; giá trị của trường đó là bản ghi của

res.users mô hình res.users

● Một phiên có một người hướngdẫn ; giá trị của trường đó là một bản ghi của res.partner

res.users.

● Một phiên có liên quan đến một khóa học; giá trị của trường đó là một bản ghi của mô

hình openacademy.coursevà được yêu cầu.

● Điều chỉnh chế độ xem.

Bài tập

Nghịch đảo các mối quan hệ one2many

Sử dụng trường quan hệ nghịch đảo one2many, sửa đổi các mô hình để phản ánh mối quan hệ giữa các khóa học và phiên.

Bài tập

Nhiều mối quan hệ đa phương

Sử dụng trường quan hệ nhiều - nhiều, sửa đổi mô hình Phiên để liên quan mỗi phiên với

một tập hợp những người tham dự. Người tham dự sẽ được đại diện bởi hồ sơ đối tác, vì vậy

chúng tôi sẽ liên quan đến res.partner mô hình tích hợp. Điều chỉnh các quan điểm cho phù hợp.

5. Kế thừa

Kế thừa mô hình

Cơ chế kế thừa đầu tiên cho phép một mô-đun sửa đổi hành vi của một mô hình được xác định trong một mô-đun khác:

● thêm trường vào mô hình,

● ghi đè định nghĩa của các trường trên mô hình, ● thêm ràng buộc vào mô hình,

● thêm phương pháp vào mô hình,

● ghi đè các phương pháp hiện có trên mô hình.

Cơ chế kế thừa thứ hai (ủy quyền) cho phép liên kết mọi bản ghi của mô hình với bản ghi trong mô hình cha và cung cấp quyền truy cập minh bạch vào các trường của bản ghi mẹ.

Xem thêm

● _inherit ● _inherits

Thay vì sửa đổi các chế độ xem hiện có tại chỗ (bằng cách ghi đè chúng), Odoo cung cấp tính năng kế thừa dạng xem trong đó chế độ xem "phần mở rộng" của trẻ em được áp dụng trên các chế độ xem gốc và có thể thêm hoặc xóa nội dung khỏi cha mẹ của chúng.

Dạng xem phần mở rộng tham chiếu đến cha mẹ của nó bằng cách sử dụng trường inherit_id và thay vì một chế độ xem duy nhất, trường arch của nó bao gồm bất kỳ số lượng thành phần xpath nào chọn và thay đổi nội dung của dạng xem mẹ của chúng:

<!-- improved idea categories list -->

<recordid="idea_category_list2"model="ir.ui.view">

<fieldname="name">id.category.list2</field>

<fieldname="model">idea.category</field>

<fieldname="inherit_id"ref="id_category_list"/>

<fieldname="arch"type="xml">

<!-- find field description and add the field idea_ids after it -->

<xpathexpr="//field[@name='description']"position="after">

<fieldname="idea_ids"string="Number of ideas"/>

</xpath>

</field> </record>

expr

Biểu thức XPath chọn một phần tử duy nhất trong dạng xem mẹ. Gây ra lỗi nếu nó khớp với không có phần tử hoặc nhiều hơn một

position

Thao tác để áp dụng cho phần tử phù hợp:

inside

nối cơ thể của xpathở cuối phần tử phù hợp

replace

thay thế phần tử phù hợp bằng cơ thể của xpath,thay thế bất kỳ sự xuất hiện nút $ 0 nào trong cơ thể mới bằng phần tử ban đầu

before

chèn cơ thể của xpathnhư một anh chị em trước yếu tố phù hợp

after

chèn cơ thể của xpathsnhư một anh chị em sau khi yếu tố phù hợp

attributes

thay đổi các thuộc tính của phần tử phù hợp bằng cách sử dụng các yếu tố thuộc tính đặc biệt trong cơthể củaxpath

Mẹo

Khi khớp với một phần tử duy nhất, thuộc tính position vị trí có thể được đặt trực tiếp trên phần tử được tìm thấy. Cả hai thừa kế dưới đây sẽ cho kết quả giống nhau.

<xpathexpr="//field[@name='description']"position="after">

<fieldname="idea_ids"/> </xpath>

<fieldname="description"position="after">

<fieldname="idea_ids"/> </field>

Bài tập

Thay đổi nội dung hiện có

● Sử dụng kế thừa mô hình, sửa đổi mô hình Đối tác hiện có để thêm trường

instructor boolean người hướng dẫn và trường Many2many tương ứng với mối quan hệ đối tác phiên

● Sử dụng kế thừa dạng xem, hiển thị các trường này trong dạng xem biểu mẫu đối tác

Tên miền

Trong Odoo, Tìm kiếm tên miền các giá trị mã hóa các điều kiện trên bản ghi. Tên miền là danh sách các tiêu chí được sử dụng để chọn một tập hợp con các bản ghi của mô hình. Mỗi tiêu chí là một bộ ba với một tên trường, một toán tử và một giá trị.

Ví dụ: khi được sử dụng trên mô hìnhSản phẩm, miền sau chọn tất cả các dịch vụ có đơn giá trên 1000:

[('product_type', '=', 'service'), ('unit_price', '>', 1000)]

Theo tiêu chí mặc định được kết hợp với một AND ngầm. Các toán tử logic &(AND), | (OR) và! (KHÔNG) có thể được sử dụng để kết hợp rõ ràng các tiêu chí. Chúng được sử dụng ở vị trí tiền tố (toán tử được chèn trước các đối số của nó chứ không phải giữa). Ví dụ: để chọn sản phẩm "là dịch vụ HOẶC có đơn giá KHÔNG phải từ 1000 đến 2000":

['|',

('product_type', '=', 'service'), '!', '&',

('unit_price', '>=', 1000), ('unit_price', '<', 2000)]

Tham số domain có thể được thêm vào các trường quan hệ để giới hạn các bản ghi hợp lệ cho mối quan hệ khi cố gắng chọn các bản ghi trong giao diện máy khách.

Bài tập

Tên miền trên các trường quan hệ

Khi chọn người hướng dẫn cho một phiên, chỉ có người hướng dẫn (đối tác với người

hướng dẫn được đặt thành True)mới được hiển thị.

Tên miền phức tạp hơn

Tạo danh mục đối tác mới Giáo viên / Cấp độ 1Giáo viên / Cấp độ 2. Người hướng

dẫn cho một buổi học có thể là người hướng dẫn hoặc giáo viên (ở bất kỳ cấp độ nào).

Một phần của tài liệu Tìm hiểu ODOO FRAMEWORK và xây dựng ứng dụng thương mại điện tử WEBSITE EPIC furniture (báo cáo cuối kì đồ án 1) (Trang 162 - 167)

Tải bản đầy đủ (PDF)

(183 trang)