Để tính toán Field _1 của Model_A dựa trên Field_2 của Model_B thì điều kiện cần có ít nhất như sau:
- Model_A phải chứa một trường quan hệ đến Model_B. Ví dụ, trong Model_A có một trường model_b_id quan hệ Many2one đến Model_B
Giả sử Field_1 của Model_A đc tính bằng 2 lần Field_2 của Model_B thì công thức tổng quát như sau
Field_1 = 2*model_b_id.Field_2
Trong trường hợp cụ thể của bác, bác cần tổ chức đúng đã. Ví dụ, không thể tính toán khối lượng của sản phẩm ở trên form sản phẩm theo kiểu lấy số lượng nhân khối lượng riêng được. Vì số lượng nó thay đổi theo ngữ cảnh (phiếu xuất nhập, đơn hàng, lệnh sản xuất, v.v.). Khối lượng được tính toán đối với sản phẩm A nó sẽ phải nằm ở ngữ cảnh cụ thể, ví dụ stock.picking, sale.order, v.v.
Hay cụ thể hơn nữa, nếu Khối lượng cần tính toán (KLTT) là một trường được tính = khối lượng riêng * số lượng thì trường KLTT phải được đặt ở ngữ cảnh khác ngữ cảnh sản phẩm còn khối lượng riêng thì đặt ở sản phẩm (trường này mặc định Odoo có rồi). Ví dụ, đặt ở sale.order.line và cho hiện thị tổng khối lượng từng dòng trên sale.order. Cụ thể trường hợp này có thể làm như sau:
Thêm trường weight vào sale.order.line. Trường này kiểu tính toán, có giá trị tính như sau
for r in self
r['weight'] = r.product_id.weight * r.product_uom_qty # lấy khối lượng của sản phẩm thuộc dòng nhân với số lượng khai báo trên dòng
r.product_id.weight <<== đây chính là lấy giá trị ở đối tượng product.product để tính toán cho field ở đối tượng sale.order.line
Khai báo phụ thuộc thì sẽ khai báo là: product_id.weight
Dĩ nhiên đây chỉ là minh hoạ, cụ thể thực tế còn cần xem xét thêm yếu tố chuyển đổi đơn vị, ví dụ có sản phẩm thì dùng tấn, có sp khác lại dùng kg.
EDIT:
Bài tham khảo dưới đây cũng là tính toán giá trị "xuyên" từ đối tượng khác sang (trường tính toán ở sale.order nhưng trường phụ thuộc lại nằm ở sale.order.line)
https://erponline.vn/vi/forum/hoi-dap-7/lam-sao-de-hien-trang-thai-van-chuyen-o-phan-danh-sach-cua-don-hang-2031