Tạo báo cáo tùy chỉnh¶
Chế độ xem SQL là kỹ thuật tạo báo cáo tùy chỉnh để hiển thị dữ liệu không thể hiển thị bằng các trường và chế độ xem của mô hình hiện có. Nói cách khác, kỹ thuật này giúp tránh việc tạo và tính toán các trường bổ sung không cần thiết chỉ nhằm mục đích phân tích dữ liệu.
Tạo một mô hình¶
Chế độ xem SQL được tạo theo cách tương tự như mô hình chuẩn:
from odoo import fields, models
class ModuleReport(models.Model):
_name = 'module.report'
_description = "Module Report"
_rec_name = 'module_field'
_auto = False
Nơi có các thuộc tính:
_auto = False
chỉ ra rằng chúng tôi không muốn lưu trữ mô hình trong cơ sở dữ liệu_rec_name
cho biết trường nào của mô hình đại diện cho tên của bản ghi (tức là tên sẽ được sử dụng trong đường dẫn điều hướng khi mở chế độ xem biểu mẫu của bản ghi)
và các trường của nó được xác định theo cách giống như mô hình chuẩn, ngoại trừ mọi trường đều được đánh dấu là readonly=True
.
Ghi chú
Đừng quên thêm mô hình mới vào tệp bảo mật của bạn.
Điền vào mô hình¶
Có 2 cách để điền vào bảng của khung nhìn SQL:
ghi đè phương thức
BaseModel.init()
,đặt thuộc tính
_table_query
.
Bất kể sử dụng cách nào, một truy vấn SQL sẽ được thực thi để điền vào mô hình. Do đó, bất kỳ lệnh SQL nào cũng có thể được sử dụng để thu thập và/hoặc tính toán dữ liệu cần thiết và bạn phải ghi nhớ rằng bạn đang bỏ qua ORM (tức là bạn nên đọc qua Bảo mật trong SoOn nếu bạn chưa có). Các cột được trả về từ SELECT
sẽ điền vào các trường của mô hình, vì vậy hãy đảm bảo rằng tên cột khớp với tên trường của bạn hoặc sử dụng tên bí danh phù hợp.
Trong hầu hết các trường hợp, ghi đè phương thức BaseModel.init()
là tùy chọn tiêu chuẩn và tốt hơn để sử dụng. Nó yêu cầu nhập tools
và thường được viết như sau:
def init(self):
tools.drop_view_if_exists(self.env.cr, self._table)
self.env.cr.execute("""CREATE or REPLACE VIEW %s as (
SELECT
%s
FROM
%s
)""" % (self._table, self._select(), self._from()))
tools.drop_view_if_exists
đảm bảo rằng chế độ xem xung đột không được tạo khi truy vấn SQL được thực thi. Tiêu chuẩn là tách các phần khác nhau của truy vấn để cho phép mở rộng mô hình dễ dàng hơn. Chính xác cách phân chia truy vấn giữa các phương thức không được chuẩn hóa, nhưng ở mức tối thiểu, các phương thức _select
và _from
là phổ biến và tất nhiên, tất cả các phương thức này sẽ trả về các chuỗi.
Thuộc tính _table_query
được sử dụng khi chế độ xem phụ thuộc vào ngữ cảnh. Nó thường được viết như sau:
@property
def _table_query(self):
return 'SELECT %s FROM %s' % (self._select(), self._from())
và tuân theo các tiêu chuẩn phương thức _select
và _from
giống như BaseModel.init()
.
Một ví dụ về thời điểm nên sử dụng thuộc tính thay vì ghi đè BaseModel.init()
là trong môi trường nhiều công ty và nhiều loại tiền tệ, nơi các số tiền liên quan đến tiền tệ cần được chuyển đổi bằng cách sử dụng tỷ giá hối đoái khi người dùng chuyển đổi giữa các công ty.
Sử dụng mô hình¶
Chế độ xem và mục menu cho chế độ xem SQL của bạn được tạo và sử dụng giống như bất kỳ mô hình SoOn nào khác. Bạn đã sẵn sàng bắt đầu sử dụng chế độ xem SQL của mình. Chúc vui vẻ!
Lời khuyên bổ sung¶
Mẹo
Một lỗi phổ biến trong chế độ xem SQL là không xem xét việc sao chép một số dữ liệu nhất định do THAM GIA bảng. Điều này có thể dẫn đến việc đếm sai khi sử dụng group_operator
và/hoặc chế độ xem trục của trường. Tốt nhất bạn nên kiểm tra chế độ xem SQL của mình với đủ dữ liệu để đảm bảo giá trị trường kết quả đúng như bạn mong đợi.
Mẹo
Nếu bạn có một trường mà bạn không muốn làm thước đo (tức là trong chế độ xem trục hoặc biểu đồ của bạn), hãy thêm store=False
vào trường đó và trường đó sẽ không hiển thị.