Просмотр исходного кода

Correct filter name in redirect after bulk edit
* Added modified_by_request filter to ChangeLoggedFilterSet

kkthxbye-code 2 лет назад
Родитель
Сommit
c86cfe3cbf

+ 31 - 6
netbox/extras/tests/test_filtersets.py

@@ -965,11 +965,13 @@ class ChangeLoggedFilterSetTestCase(TestCase):
             Site(name='Site 1', slug='site-1'),
             Site(name='Site 2', slug='site-2'),
             Site(name='Site 3', slug='site-3'),
+            Site(name='Site 4', slug='site-4'),
         )
         Site.objects.bulk_create(sites)
 
         # Simulate *creation* changelog records for two of the sites
         request_id = uuid.uuid4()
+        cls.create_request_id = request_id
         objectchanges = (
             ObjectChange(
                 changed_object_type=content_type,
@@ -988,6 +990,7 @@ class ChangeLoggedFilterSetTestCase(TestCase):
 
         # Simulate *update* changelog records for two of the sites
         request_id = uuid.uuid4()
+        cls.update_request_id = request_id
         objectchanges = (
             ObjectChange(
                 changed_object_type=content_type,
@@ -1004,14 +1007,36 @@ class ChangeLoggedFilterSetTestCase(TestCase):
         )
         ObjectChange.objects.bulk_create(objectchanges)
 
+        # Simulate *create* and *update* changelog records for two of the sites
+        request_id = uuid.uuid4()
+        cls.create_update_request_id = request_id
+        objectchanges = (
+            ObjectChange(
+                changed_object_type=content_type,
+                changed_object_id=sites[2].pk,
+                action=ObjectChangeActionChoices.ACTION_CREATE,
+                request_id=request_id
+            ),
+            ObjectChange(
+                changed_object_type=content_type,
+                changed_object_id=sites[3].pk,
+                action=ObjectChangeActionChoices.ACTION_UPDATE,
+                request_id=request_id
+            ),
+        )
+        ObjectChange.objects.bulk_create(objectchanges)
+
     def test_created_by_request(self):
-        request_id = ObjectChange.objects.filter(action=ObjectChangeActionChoices.ACTION_CREATE).first().request_id
-        params = {'created_by_request': request_id}
+        params = {'created_by_request': self.create_request_id}
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
-        self.assertEqual(self.queryset.count(), 3)
+        self.assertEqual(self.queryset.count(), 4)
 
     def test_updated_by_request(self):
-        request_id = ObjectChange.objects.filter(action=ObjectChangeActionChoices.ACTION_UPDATE).first().request_id
-        params = {'updated_by_request': request_id}
+        params = {'updated_by_request': self.update_request_id}
+        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
+        self.assertEqual(self.queryset.count(), 4)
+
+    def test_modified_by_request(self):
+        params = {'modified_by_request': self.create_update_request_id}
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
-        self.assertEqual(self.queryset.count(), 3)
+        self.assertEqual(self.queryset.count(), 4)

+ 8 - 4
netbox/netbox/filtersets.py

@@ -246,18 +246,22 @@ class ChangeLoggedModelFilterSet(BaseFilterSet):
     updated_by_request = django_filters.UUIDFilter(
         method='filter_by_request'
     )
+    modified_by_request = django_filters.UUIDFilter(
+        method='filter_by_request'
+    )
 
     def filter_by_request(self, queryset, name, value):
         content_type = ContentType.objects.get_for_model(self.Meta.model)
         action = {
-            'created_by_request': ObjectChangeActionChoices.ACTION_CREATE,
-            'updated_by_request': ObjectChangeActionChoices.ACTION_UPDATE,
+            'created_by_request': Q(action=ObjectChangeActionChoices.ACTION_CREATE),
+            'updated_by_request': Q(action=ObjectChangeActionChoices.ACTION_UPDATE),
+            'modified_by_request': Q(action__in=[ObjectChangeActionChoices.ACTION_CREATE, ObjectChangeActionChoices.ACTION_UPDATE]),
         }.get(name)
         request_id = value
         pks = ObjectChange.objects.filter(
+            action,
             changed_object_type=content_type,
-            action=action,
-            request_id=request_id
+            request_id=request_id,
         ).values_list('changed_object_id', flat=True)
         return queryset.filter(pk__in=pks)
 

+ 1 - 1
netbox/netbox/views/generic/bulk_views.py

@@ -458,7 +458,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
                     messages.success(request, msg)
 
                     view_name = get_viewname(model, action='list')
-                    results_url = f"{reverse(view_name)}?created_by_request={request.id}"
+                    results_url = f"{reverse(view_name)}?modified_by_request={request.id}"
                     return redirect(results_url)
 
             except (AbortTransaction, ValidationError):