Suốt chục bài qua ta dựng đủ loại view cho model thẻ thành viên: list, form, kanban, pivot, graph, calendar, activity. Nhưng làm sao người dùng nhảy giữa chúng bằng mấy cái nút ở góc phải màn hình? Câu trả lời gói gọn trong một field của action: view_mode — một chuỗi tên view phân tách bằng phẩy. Bài này mổ xẻ field nhỏ mà quyền lực đó.
Một chuỗi, nhiều view
view_mode nằm trong bản ghi ir.actions.act_window (cái action mà menu trỏ tới). Nó liệt kê mọi kiểu view mà action cho phép mở:

Hình 1: view_mode="kanban,list,calendar,activity,form,pivot,graph". Mỗi tên là một kiểu view. Thứ tự quan trọng: kanban đứng đầu nên action mở kanban trước, và các nút chuyển hiện đúng thứ tự này. list chứ không phải tree — đây là Odoo 19.
Nút chuyển và view mở đầu
Mở action lên, ở góc trên phải hiện một dãy nút — mỗi nút một kiểu view, đúng thứ tự khai trong view_mode:

Hình 2: Dãy nút chuyển view. Sáu biểu tượng ứng với sáu kiểu view có nút (kanban đang chọn). Để ý không có nút cho form — dù form nằm trong view_mode. Vì form là view của một bản ghi, nó mở khi bạn bấm vào một thẻ, chứ không phải một chế độ duyệt để bấm nút.
Cùng action, đổi hẳn diện mạo
Bấm nút graph, vẫn là action đó, cùng bộ dữ liệu — nhưng giờ là biểu đồ:

Hình 3: Cùng action_the_thanh_vien, chuyển sang chế độ graph — tổng điểm theo hạng thẻ dạng cột. Không phải action khác, không phải màn hình khác: chỉ là một view_mode khác của cùng một action. Người dùng bấm nút là đổi cách nhìn cùng dữ liệu.
Đây là sức mạnh của việc gom nhiều view vào một action: người dùng duyệt kanban để thao tác, chuyển list để xem chi tiết, nhảy graph/pivot để phân tích — tất cả trên cùng tập dữ liệu, không rời màn hình.
Vài lưu ý
- Thứ tự là view mặc định. View đầu tiên trong
view_modelà view mở lên khi bấm menu. Muốn mặc định là list thì đểlistlên đầu. formgần như luôn cần, kể cả khi bạn không muốn nút form: thiếu nó, bấm vào một bản ghi không mở được chi tiết. Nó không chiếm nút chuyển.- Chỉ khai view thật sự có ý nghĩa. Model không có field ngày thì đừng thêm
calendar; không có gì để tổng hợp thìpivot/graphcũng nhạt. Mỗi view thừa là một nút vô dụng. - Odoo tự tìm view khớp theo
res_model+ kiểu; nếu bạn không định nghĩa view kiểu đó, Odoo dựng một view mặc định tối giản.
Ba ý mang về
view_modetrongir.actions.act_windowlà chuỗi tên view phân tách bằng phẩy — liệt kê mọi kiểu view mà action cho phép; nút chuyển hiện ở góc phải đúng thứ tự đó.- Thứ tự quyết định view mở đầu: phần tử đầu tiên là view mặc định khi bấm menu; đổi thứ tự là đổi mặc định lẫn thứ tự nút.
formluôn nên có nhưng không chiếm nút chuyển — nó mở khi bấm một bản ghi; chỉ khai các view thật sự hợp với dữ liệu (đừng thêm calendar khi không có field ngày).
Action mở ra mà chưa có bản ghi nào thì người dùng thấy màn hình trống trơn, khá bối rối. Bài sau chữa đúng chuyện đó: Phần sau về no-content help — lời gợi ý thân thiện hiện trên màn hình trống để hướng người dùng tạo bản ghi đầu tiên.