Search, Filter, Group By trong Odoo
Tut 14: Search, Filter & Group By
Odoo Tut 14: Search, Filter & Group
Trước khi xem bài viết này, bạn vui lòng hoàn thành hướng dẫn ở Tut 13: Thêm button cho list/tree view trong Odoo.
Bài viết này sẽ hướng dẫn bạn:
- Thêm mới cách tìm kiếm trên một trường dữ liệu (Custom Search in Odoo)
- Thêm mới bộ lọc dữ liệu trong Odoo (Custom Filter in Odoo)
- Thêm mới nhóm dữ liệu theo cột trong Odoo (Custom Group By in Odoo)
Code mẫu hoàn chỉnh việc customize search, filter, group trong Odoo bạn có thể tải về ở cuối bài viết
Môi trường lập trình:
- Ubuntu
- Python 3
- Odoo 13 (released 2019)
Tham khảo cách tạo dựng môi trường Odoo 13 với Docker Compose: https://github.com/minhng92/odoo-13-docker-compose
Thanh điều khiển tìm kiếm, lọc và nhóm trong giao diện danh sách
Giao diện mặc định list view trong Odoo sẽ có sẵn các thành phần:
- Thanh tìm kiếm dữ liệu nằm trong
search view
- Lọc dữ liệu và nhóm dữ liệu nằm trong
control panel (right)
Bài viết hôm nay Minh sẽ customize các thành phần tìm kiếm (search), lọc dữ liệu (filter) và nhóm theo dữ liệu (group by) trong Odoo.
Customize search theo field
Mặc định thanh tìm kiếm sẽ chỉ cho phép tìm kiếm theo tên (tương ứng trường name
) cho một model mới - tức custom model. Do đó, để việc thêm lựa chọn tìm kiếm trên những trường dữ liệu khác ta phải code thêm.
Trong file view XML ta chèn thêm một đoạn code để mô tả / khai báo các lựa chọn tìm kiếm bổ sung. Vị trí chèn đoạn code cho search field như hình bên dưới.
mypet/views/my_pet_views.xml
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!-- ... -->
<!-- các đoạn code phía trên giữa nguyên như cũ -->
<record id="my_pet_search_view" model="ir.ui.view">
<field name="name">my_pet_search_view</field>
<field name="model">my.pet</field>
<field eval="10" name="priority"/>
<field name="arch" type="xml">
<search string="My Pet Search">
<field name="name" string="Pet Name"/>
<field name="nickname" string="Nick Name"/>
<field name="owner_id"/>
</search>
</field>
</record>
<record id="action_my_pet" model="ir.actions.act_window">
<!-- ... -->
<!-- các đoạn code phía trên giữa nguyên và khai báo "search_view_id" của action trỏ đến "my_pet_search_view" -->
<field name="search_view_id" ref="my_pet_search_view"/>
</record>
<!-- ... -->
</data>
</odoo>
Trong thẻ search
ta khai báo lần lượt các field có thể được tìm kiếm như: name
, nickname
và owner_id
.
Cập nhật module mypet, quay lại list view, refresh trang và thử tìm kiếm để xem kết quả.
Customize filter trong Odoo
Filter trong Odoo cho phép lọc dữ liệu theo điều kiện định sẵn. Việc bổ sung các lựa chọn filter làm tăng trải nghiệm người dùng thay vì phải tạo bộ lọc thủ công ở nút Add Custom Filter
.
mypet/views/my_pet_views.xml
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!-- ... -->
<!-- các đoạn code phía trên giữa nguyên như cũ -->
<record id="my_pet_search_view" model="ir.ui.view">
<field name="name">my_pet_search_view</field>
<field name="model">my.pet</field>
<field eval="10" name="priority"/>
<field name="arch" type="xml">
<search string="My Pet Search">
<field name="name" string="Pet Name"/>
<field name="nickname" string="Nick Name"/>
<field name="owner_id"/>
<!-- ++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- khai báo các filter trong Odoo như bên dưới: -->
<!-- ++++++++++++++++++++++++++++++++++++++++++++ -->
<group expand='0' string='Filters'>
<filter name='weight_filter' string="Low Weight (< 5kg)" domain="[('weight', '<', 5)]"/>
<separator/>
<filter name="male_filter" string="Male" domain="[('gender', '=', 'male')]"/>
<filter name="female_filter" string="Female" domain="[('gender', '=', 'female')]"/>
</group>
</search>
</field>
</record>
<!-- các đoạn code phía dưới giữa nguyên như cũ -->
<!-- ... -->
</data>
</odoo>
Theo code trên, ta đặc tả các thẻ filter
để lọc dữ liệu theo điều kiện định sẵn, cũng như đặt tên cho bộ lọc (thuộc tính string
) sẽ hiển thị trên giao diện.
Cập nhật module mypet, quay lại list view, refresh trang và click vào Filters để xem các bộ lọc mới được thêm vào.
Customize group by trong Odoo
Nhóm dữ liệu (Group By) trong Odoo cho phép nhóm dữ liệu theo cột và ta cũng có thể Group By nhiều lần liên tiếp.
Để thêm các Group định sẵn, ta khai báo như sau:
mypet/views/my_pet_views.xml
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<!-- ... -->
<!-- các đoạn code phía trên giữa nguyên như cũ -->
<record id="my_pet_search_view" model="ir.ui.view">
<field name="name">my_pet_search_view</field>
<field name="model">my.pet</field>
<field eval="10" name="priority"/>
<field name="arch" type="xml">
<search string="My Pet Search">
<field name="name" string="Pet Name"/>
<field name="nickname" string="Nick Name"/>
<field name="owner_id"/>
<group expand='0' string='Filters'>
<filter name='weight_filter' string="Low Weight (< 5kg)" domain="[('weight', '<', 5)]"/>
<separator/>
<filter name="male_filter" string="Male" domain="[('gender', '=', 'male')]"/>
<filter name="female_filter" string="Female" domain="[('gender', '=', 'female')]"/>
</group>
<!-- ++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- khai báo các Group By trong Odoo như bên dưới: -->
<!-- ++++++++++++++++++++++++++++++++++++++++++++++ -->
<group expand='0' string='Group by...'>
<filter string='Gender' name="gender_group" context="{'group_by': 'gender'}"/>
<filter string='Owner' name="owner_group" context="{'group_by': 'owner_id'}"/>
</group>
</search>
</field>
</record>
<!-- các đoạn code phía dưới giữa nguyên như cũ -->
<!-- ... -->
</data>
</odoo>
Cập nhật module mypet, quay lại list view, refresh trang và click vào Group By để xem các lựa chọn mới được thêm vào.
Code Download
Code mẫu hoàn chỉnh Tut 14: mypet_210826.zip
- Khóa học lập trình Odoo TP.HCM: Thông tin và đăng ký khóa học
- Khảo sát nhu cầu học nghiệp vụ Odoo Offline @ HCM & đăng ký sớm: https://forms.gle/auBXLNbfuNqhJSbj8
Cài đặt Odoo:
- Docker Compose for Odoo 10
- Docker Compose for Odoo 11
- Docker Compose for Odoo 12
- Docker Compose for Odoo 13
- Docker Compose for Odoo 14
- Docker Compose for Odoo 15
- Docker Compose for Odoo 16
Danh sách bài viết series Odoo:
- Tut 0: Học lập trình Odoo - tutorials
- Tut 1: Odoo là gì?
- Tut 2: Hướng dẫn cài đặt Odoo version 10, 11, 12, 13
- Tut 3: Tạo model trong Odoo
- Tut 4: View trong Odoo
- Tut 5: Controller trong Odoo
- Tut 6: Thừa kế model trong Odoo
- Tut 7: Thừa kế view trong Odoo
- Tut 8: Thừa kế controller trong Odoo
- Tut 9: API trong Odoo - XML-RPC
- Tut 10: Hiện thực wizard trong Odoo
- Tut 11: Tạo widget trong Odoo
- Tut 12: Tạo settings trong Odoo cho custom addon
- Tut 13: Thêm button cho list/tree view trong Odoo
- Tut 14: Search, Filter, Group By trong Odoo
- Tut 15: Kết nối PostgreSQL database của Odoo bằng câu lệnh
- Tut 16: Kết nối pgAdmin vào PostgreSQL database của Odoo
Tham gia ngay group trên Facebook để cùng thảo luận với đồng bọn nhé:
- Fanpage Minh: https://www.facebook.com/minhng.info
- Khám phá Odoo: https://www.facebook.com/groups/odoo-dev
Khám phá Odoo