Skip to content

Commit df49bef

Browse files
committed
Fix product versions split across pages when using collapsible grouping
Signed-off-by: utkarshasinha <utkarsha20005@gmail.com>
1 parent 547a287 commit df49bef

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

product_portfolio/views.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from django.core import signing
2323
from django.core.exceptions import ImproperlyConfigured
2424
from django.core.exceptions import ValidationError
25-
from django.core.paginator import Paginator
25+
from django.core.paginator import EmptyPage, InvalidPage, Paginator
2626
from django.db import transaction
2727
from django.db.models import Count
2828
from django.db.models import Exists
@@ -84,6 +84,7 @@
8484
from dje.utils import get_help_text
8585
from dje.utils import get_object_compare_diff
8686
from dje.utils import group_by_simple
87+
from dje.utils import group_by_name_version
8788
from dje.utils import is_uuid4
8889
from dje.views import DataspacedCreateView
8990
from dje.views import DataspacedDeleteView
@@ -177,6 +178,31 @@ class ProductListView(
177178
Header("productinventoryitem_count", "Inventory", help_text="Inventory count"),
178179
Header("keywords", "Keywords", filter="keywords"),
179180
)
181+
182+
def get_context_data(self, **kwargs):
183+
context_data = super().get_context_data(**kwargs)
184+
185+
if not self.request.GET.get("sort", None):
186+
all_groups = group_by_name_version(self.object_list)
187+
paginator = Paginator(all_groups, self.paginate_by)
188+
page_number = self.request.GET.get(self.page_kwarg, 1)
189+
190+
try:
191+
page = paginator.page(page_number)
192+
except (EmptyPage, InvalidPage):
193+
page = paginator.page(paginator.num_pages)
194+
195+
context_data.update({
196+
"name_version_groups": list(page),
197+
"is_grouping_active": bool(
198+
[1 for group in page if len(group) > 1]
199+
),
200+
"paginator": paginator,
201+
"page_obj": page,
202+
"is_paginated": paginator.num_pages > 1,
203+
})
204+
205+
return context_data
180206

181207
def get_queryset(self):
182208
vulnerable_productpackage_qs = ProductPackage.objects.vulnerable().filter(

0 commit comments

Comments
 (0)