Cái này gọi là Menu Badge. Nó cho phép lập trình viên Odoo hiển thị một cái nhãn ở menu item trong Odoo.
Để sử dụng tính năng này, bạn cần phải lập trình cho menu của mình bằng cách viết model của bạn kế thừa model ir.needaction_mixin sẵn có trong Odoo
_inherit = ['ir.needaction_mixin']
Sau đó, bạn cần định nghĩa một phương thức có tên
_needaction_domain_get để hiển thị các record mới với tiêu chí được định nghĩa trong
_needaction_domain_get, ví dụ như sau:
@api.model
def _needaction_domain_get(self):
return [('state', '=', 'new')]
Hoặc, thay vì định nghĩa phương thức trên, bạn có thể định nghĩa phương thức
_needaction_count để hiển thị số lượng, đại loại như sau:
@api.model
def _needaction_count(self, domain=None):
"""
Đếm các records của object theo domain truyền vào
hoặc đếm toàn bộ nếu không truyền domain vào
"""
return self.search_count(domain or [])
Một ví dụ cụ thể cho một class mới:
class HocSinh(models.Model):
_name = 'hocsinh'
_inherit = ['ir.needaction_mixin']
# viết riêng thằng state này ra để tiện cho thằng khác kế thừa
# mà không cần override lại trường kiểu Selection dưới đây
STATES = [
('khoe', "Sức khoẻ tốt"),
('yeu', "Sức khoẻ yếu"),
]
name = fields.Char(required=True)
state = fields.Selection(STATES, default='khoe')
@api.model
def _needaction_domain_get(self):
"""
Hiển thị số lượng học sinh bị yếu ở menu badge
"""
return [('state', '=', 'yeu')]
Hy vọng giờ bạn biết cách làm!