Jelajahi Sumber

Fix record index for related objects

Use the parent object index as record index, and its own index only on
the field name.
Marko Hauptvogel 11 bulan lalu
induk
melakukan
8452222761

+ 1 - 2
netbox/dcim/tests/test_views.py

@@ -1036,8 +1036,7 @@ module-bays:
 
         response = self.client.post(reverse('dcim:devicetype_bulk_import'), data=form_data, follow=True)
         self.assertHttpStatus(response, 200)
-        # TODO record index should be 2
-        self.assertContains(response, "Record 3 module-bays[3].name: This field is required.")
+        self.assertContains(response, "Record 2 module-bays[3].name: This field is required.")
 
     def test_export_objects(self):
         url = reverse('dcim:devicetype_list')

+ 3 - 3
netbox/netbox/views/generic/bulk_views.py

@@ -368,7 +368,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
                 error_messages.append(f"Record {index} {prefix}{field_name}: {err}")
         return error_messages
 
-    def _save_object(self, model_form, request):
+    def _save_object(self, model_form, request, parent_idx):
         _action = 'Updated' if model_form.instance.pk else 'Created'
 
         # Save the primary object
@@ -396,7 +396,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
                 else:
                     # Replicate errors on the related object form to the import form for display and abort
                     raise ValidationError(
-                        self._compile_form_errors(f.errors, index=i, prefix=f'{field_name}[{i}]')
+                        self._compile_form_errors(f.errors, index=parent_idx, prefix=f'{field_name}[{i}]')
                     )
 
             # Enforce object-level permissions on related objects
@@ -481,7 +481,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView):
             restrict_form_fields(model_form, request.user)
 
             if model_form.is_valid():
-                obj = self._save_object(model_form, request)
+                obj = self._save_object(model_form, request, i)
                 saved_objects.append(obj)
             else:
                 # Raise model form errors