From d85cf9ee0dea8582f8b5cb03d28ef62d51f1fc84 Mon Sep 17 00:00:00 2001 From: Julio Oliveira at Encora <149191228+Julio-Oliveira-Encora@users.noreply.github.com> Date: Tue, 11 Jun 2024 10:21:24 -0300 Subject: [PATCH] 16256 - Allow alphabetical ordering of bookmarks on dashboard (#16426) * Added alphabetical ordering of bookmarks. * Addressed PR comments. * Rename choice constants & fix unrelated typo --------- Co-authored-by: Jeremy Stretch --- netbox/extras/choices.py | 4 ++++ netbox/extras/dashboard/widgets.py | 12 +++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/netbox/extras/choices.py b/netbox/extras/choices.py index 2c9d5836a6f..12e10f553aa 100644 --- a/netbox/extras/choices.py +++ b/netbox/extras/choices.py @@ -117,10 +117,14 @@ class BookmarkOrderingChoices(ChoiceSet): ORDERING_NEWEST = '-created' ORDERING_OLDEST = 'created' + ORDERING_ALPHABETICAL_AZ = 'name' + ORDERING_ALPHABETICAL_ZA = '-name' CHOICES = ( (ORDERING_NEWEST, _('Newest')), (ORDERING_OLDEST, _('Oldest')), + (ORDERING_ALPHABETICAL_AZ, _('Alphabetical (A-Z)')), + (ORDERING_ALPHABETICAL_ZA, _('Alphabetical (Z-A)')), ) # diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index add81a318de..c4710468b5e 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -381,11 +381,17 @@ def render(self, request): if request.user.is_anonymous: bookmarks = list() else: - bookmarks = Bookmark.objects.filter(user=request.user).order_by(self.config['order_by']) + user_bookmarks = Bookmark.objects.filter(user=request.user) + if self.config['order_by'] == BookmarkOrderingChoices.ORDERING_ALPHABETICAL_AZ: + bookmarks = sorted(user_bookmarks, key=lambda bookmark: bookmark.__str__().lower()) + elif self.config['order_by'] == BookmarkOrderingChoices.ORDERING_ALPHABETICAL_ZA: + bookmarks = sorted(user_bookmarks, key=lambda bookmark: bookmark.__str__().lower(), reverse=True) + else: + bookmarks = user_bookmarks.order_by(self.config['order_by']) if object_types := self.config.get('object_types'): models = get_models_from_content_types(object_types) - conent_types = ObjectType.objects.get_for_models(*models).values() - bookmarks = bookmarks.filter(object_type__in=conent_types) + content_types = ObjectType.objects.get_for_models(*models).values() + bookmarks = bookmarks.filter(object_type__in=content_types) if max_items := self.config.get('max_items'): bookmarks = bookmarks[:max_items]