Nhìn đầu bất kỳ form Odoo nào, bạn thấy một khuôn quen: dải nút với thanh trạng thái hình mũi tên trên cùng, rồi tên bản ghi in to ngay dưới, và thường có ảnh đại diện nép góc phải. Ba thứ đó không phải ngẫu nhiên — chúng là <header>, oe_title và oe_avatar. Hiểu chúng, bạn dựng được phần đầu form gọn gàng và đúng "chất Odoo". Bài này mổ xẻ chúng trên form thẻ thành viên.
header: nút hành động + statusbar
<header> nằm ngoài <sheet>, ngay trên cùng form. Nó giữ hai loại thứ: các nút hành động (gọi method hoặc mở wizard) và một statusbar — widget hiển thị field trạng thái thành dải mũi tên các bước.

Hình 1: <header> chứa hai nút và một statusbar. Nút "Gia hạn thẻ" có invisible theo trạng thái. statusbar cho field trang_thai với statusbar_visible chọn các bước hiện, clickable cho phép bấm đổi bước. Trong <sheet>, oe_avatar đẩy ảnh về góc phải, oe_title là khối tiêu đề lớn.
Nhìn phần đầu form thật
Mở một thẻ chưa "đang dùng" (VIP-0002, trạng thái Hết hạn) để thấy đủ cả nút lẫn thanh trạng thái:

Hình 2: Phần đầu form thật. Header: nút "Gia hạn thẻ" (btn-primary) + "Cộng điểm...", và statusbar "Mới cấp → Đang dùng → Hết hạn" (Hết hạn đang sáng). oe_title: nhãn "Mã thẻ" + tên lớn "VIP-0002". oe_avatar: ô ảnh góc phải. Trên cùng là smart button "Lượt tích điểm".
Nút "Gia hạn thẻ" hiện ra vì thẻ này không ở trạng thái "đang dùng" — đúng với điều kiện invisible="trang_thai == 'dang_dung'". Đây là mẫu quen: nút hành động chỉ xuất hiện khi có nghĩa.
Ba mảnh, ba vai trò
<header>— luôn ở ngoài<sheet>, trên cùng. Là nơi đặt nút hành động của cả bản ghi (không phải nút cho một field) và statusbar. Nút ở đây thường là các bước quy trình: xác nhận, huỷ, gia hạn.- statusbar (
widget="statusbar") — biến một field Selection trạng thái thành dải mũi tên.statusbar_visiblechọn bước nào hiện;clickablecho phép người dùng bấm để nhảy bước. oe_title— chỉ là một<div class="oe_title">, quy ước để CSS làm khối tiêu đề lớn (thường bọc<h1>quanh field tên).oe_avatar— class đẩy một field ảnh về góc phải trên của sheet.
Quan trọng: oe_title và oe_avatar là quy ước class của Odoo, không phải thẻ đặc biệt. Sức mạnh đến từ CSS gắn sẵn với tên class đó.
Vài lưu ý
- Nút bản ghi vào header, nút field vào chỗ khác. Nút gọi hành động lên cả bản ghi (gia hạn, xác nhận) thuộc
<header>; nút thao tác nhỏ trong một nhóm thì đặt cạnh field. - statusbar cần field Selection. Nó vẽ các giá trị của field làm bước. Với trạng thái quy trình, đây là cách hiển thị chuẩn thay cho một ô selection thường.
- oe_title thường bọc
<h1>để chữ thật to; đặt field tên (hoặc field định danh) vào đó. Có thể thêm dòng phụ nhỏ bên dưới trong cùng div. - Tất cả phần đầu này là bố cục + hành động — statusbar clickable có đổi dữ liệu (trạng thái), còn oe_title/oe_avatar thuần hiển thị.
Ba ý mang về
<header>(ngoài<sheet>) giữ nút hành động của bản ghi + statusbar — dải trên cùng của form; nút thường cóinvisibletheo trạng thái để chỉ hiện khi hợp lý.- statusbar biến field Selection trạng thái thành dải mũi tên với
statusbar_visible(bước nào hiện) vàclickable(bấm đổi bước). oe_titlevàoe_avatarlà quy ước class: oe_title cho khối tiêu đề lớn (thường<h1>field tên), oe_avatar đẩy ảnh về góc phải — sức mạnh nằm ở CSS gắn với tên class.
Xong form. Bài sau chuyển hẳn sang một loại view khác — cách trình bày dạng thẻ: Phần sau về kanban với progressbar và cột theo nhóm — bảng thẻ kéo-thả có thanh tiến độ và chia cột theo trạng thái.