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]