Procházet zdrojové kódy

Bulk update should return complete object representation

Jeremy Stretch před 5 roky
rodič
revize
5ed5ffea0e
2 změnil soubory, kde provedl 12 přidání a 2 odebrání
  1. 6 2
      netbox/netbox/api/views.py
  2. 6 0
      netbox/utilities/testing/api.py

+ 6 - 2
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

+ 6 - 0
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)