From 8452222761800ee6c1d9f2dc4db98795f16ecaaa Mon Sep 17 00:00:00 2001 From: Marko Hauptvogel Date: Thu, 30 Oct 2025 13:33:34 +0100 Subject: [PATCH] Fix record index for related objects Use the parent object index as record index, and its own index only on the field name. --- netbox/dcim/tests/test_views.py | 3 +-- netbox/netbox/views/generic/bulk_views.py | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index 21d9e80aa..1643e381a 100644 --- a/netbox/dcim/tests/test_views.py +++ b/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') diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index 228e79d7c..4b8bc61e9 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/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