Correct filter name in redirect after bulk edit

* Added modified_by_request filter to ChangeLoggedFilterSet
This commit is contained in:
kkthxbye-code 2023-08-17 09:29:49 +02:00 committed by Jeremy Stretch
parent b022952d18
commit bf7405fd28
3 changed files with 40 additions and 11 deletions

View File

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

View File

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

View File

@ -458,7 +458,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
messages.success(request, msg) messages.success(request, msg)
view_name = get_viewname(model, action='list') 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) return redirect(results_url)
except (AbortTransaction, ValidationError): except (AbortTransaction, ValidationError):