From 5ed5ffea0e5280e4d4235695814ed70273fe3cc5 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 11 Nov 2020 13:02:28 -0500 Subject: [PATCH] Bulk update should return complete object representation --- netbox/netbox/api/views.py | 8 ++++++-- netbox/utilities/testing/api.py | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/netbox/netbox/api/views.py b/netbox/netbox/api/views.py index f63b3134f..881effd71 100644 --- a/netbox/netbox/api/views.py +++ b/netbox/netbox/api/views.py @@ -67,17 +67,21 @@ class BulkUpdateModelMixin: obj.pop('id'): obj for obj in request.data } - self.perform_bulk_update(qs, update_data, partial=partial) + data = self.perform_bulk_update(qs, update_data, partial=partial) - return Response(status=status.HTTP_200_OK) + return Response(data, status=status.HTTP_200_OK) def perform_bulk_update(self, objects, update_data, partial): with transaction.atomic(): + data_list = [] for obj in objects: data = update_data.get(obj.id) serializer = self.get_serializer(obj, data=data, partial=partial) serializer.is_valid(raise_exception=True) self.perform_update(serializer) + data_list.append(serializer.data) + + return data_list def bulk_partial_update(self, request, *args, **kwargs): kwargs['partial'] = True diff --git a/netbox/utilities/testing/api.py b/netbox/utilities/testing/api.py index dbd580f77..189812944 100644 --- a/netbox/utilities/testing/api.py +++ b/netbox/utilities/testing/api.py @@ -225,6 +225,9 @@ class APIViewTestCases: self.assertHttpStatus(response, status.HTTP_201_CREATED) self.assertEqual(len(response.data), len(self.create_data)) self.assertEqual(self._get_queryset().count(), initial_count + len(self.create_data)) + for i, obj in enumerate(response.data): + for field in self.create_data[i]: + self.assertIn(field, obj, f"Bulk create field '{field}' missing from object {i} in response") for i, obj in enumerate(response.data): self.assertInstanceEqual( self._get_queryset().get(pk=obj['id']), @@ -292,6 +295,9 @@ class APIViewTestCases: response = self.client.patch(self._get_list_url(), data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_200_OK) + for i, obj in enumerate(response.data): + for field in self.bulk_update_data: + self.assertIn(field, obj, f"Bulk update field '{field}' missing from object {i} in response") for instance in self._get_queryset().filter(pk__in=id_list): self.assertInstanceEqual(instance, self.bulk_update_data, api=True)