diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index 35caa31b3..43a55e453 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -8,7 +8,7 @@ from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist, Valida from django.db import transaction, IntegrityError from django.db.models import ManyToManyField, ProtectedError from django.db.models.fields.reverse_related import ManyToManyRel -from django.forms import ModelMultipleChoiceField, MultipleHiddenInput +from django.forms import HiddenInput, ModelMultipleChoiceField, MultipleHiddenInput from django.http import HttpResponse from django.shortcuts import get_object_or_404, redirect, render from django.urls import reverse @@ -313,6 +313,13 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView): """ return data + def _get_form_fields(self): + # Exclude any fields which use a HiddenInput widget + return { + name: field for name, field in self.model_form().fields.items() + if type(field.widget) is not HiddenInput + } + def _save_object(self, model_form, request): # Save the primary object @@ -430,7 +437,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView): return render(request, self.template_name, { 'model': self.model_form._meta.model, 'form': form, - 'fields': self.model_form().fields, + 'fields': self._get_form_fields(), 'return_url': self.get_return_url(request), **self.get_extra_context(request), }) @@ -475,7 +482,7 @@ class BulkImportView(GetReturnURLMixin, BaseMultiObjectView): return render(request, self.template_name, { 'model': model, 'form': form, - 'fields': self.model_form().fields, + 'fields': self._get_form_fields(), 'return_url': self.get_return_url(request), **self.get_extra_context(request), })