mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Bulk update should return complete object representation
This commit is contained in:
@ -67,17 +67,21 @@ class BulkUpdateModelMixin:
|
|||||||
obj.pop('id'): obj for obj in request.data
|
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):
|
def perform_bulk_update(self, objects, update_data, partial):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
data_list = []
|
||||||
for obj in objects:
|
for obj in objects:
|
||||||
data = update_data.get(obj.id)
|
data = update_data.get(obj.id)
|
||||||
serializer = self.get_serializer(obj, data=data, partial=partial)
|
serializer = self.get_serializer(obj, data=data, partial=partial)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
self.perform_update(serializer)
|
self.perform_update(serializer)
|
||||||
|
data_list.append(serializer.data)
|
||||||
|
|
||||||
|
return data_list
|
||||||
|
|
||||||
def bulk_partial_update(self, request, *args, **kwargs):
|
def bulk_partial_update(self, request, *args, **kwargs):
|
||||||
kwargs['partial'] = True
|
kwargs['partial'] = True
|
||||||
|
@ -225,6 +225,9 @@ class APIViewTestCases:
|
|||||||
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
self.assertHttpStatus(response, status.HTTP_201_CREATED)
|
||||||
self.assertEqual(len(response.data), len(self.create_data))
|
self.assertEqual(len(response.data), len(self.create_data))
|
||||||
self.assertEqual(self._get_queryset().count(), initial_count + 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):
|
for i, obj in enumerate(response.data):
|
||||||
self.assertInstanceEqual(
|
self.assertInstanceEqual(
|
||||||
self._get_queryset().get(pk=obj['id']),
|
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)
|
response = self.client.patch(self._get_list_url(), data, format='json', **self.header)
|
||||||
self.assertHttpStatus(response, status.HTTP_200_OK)
|
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):
|
for instance in self._get_queryset().filter(pk__in=id_list):
|
||||||
self.assertInstanceEqual(instance, self.bulk_update_data, api=True)
|
self.assertInstanceEqual(instance, self.bulk_update_data, api=True)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user