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
|
||||
}
|
||||
|
||||
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
|
||||
|
@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user