|
22 | 22 | from django.core import signing |
23 | 23 | from django.core.exceptions import ImproperlyConfigured |
24 | 24 | from django.core.exceptions import ValidationError |
25 | | -from django.core.paginator import Paginator |
| 25 | +from django.core.paginator import EmptyPage, InvalidPage, Paginator |
26 | 26 | from django.db import transaction |
27 | 27 | from django.db.models import Count |
28 | 28 | from django.db.models import Exists |
|
84 | 84 | from dje.utils import get_help_text |
85 | 85 | from dje.utils import get_object_compare_diff |
86 | 86 | from dje.utils import group_by_simple |
| 87 | +from dje.utils import group_by_name_version |
87 | 88 | from dje.utils import is_uuid4 |
88 | 89 | from dje.views import DataspacedCreateView |
89 | 90 | from dje.views import DataspacedDeleteView |
@@ -177,6 +178,31 @@ class ProductListView( |
177 | 178 | Header("productinventoryitem_count", "Inventory", help_text="Inventory count"), |
178 | 179 | Header("keywords", "Keywords", filter="keywords"), |
179 | 180 | ) |
| 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 |
180 | 206 |
|
181 | 207 | def get_queryset(self): |
182 | 208 | vulnerable_productpackage_qs = ProductPackage.objects.vulnerable().filter( |
|
0 commit comments