diff --git a/docs/release-notes/version-3.0.md b/docs/release-notes/version-3.0.md index 18af70e7f..85d56799c 100644 --- a/docs/release-notes/version-3.0.md +++ b/docs/release-notes/version-3.0.md @@ -16,6 +16,7 @@ * [#7643](https://github.com/netbox-community/netbox/issues/7643) - Fix circuit assignment when creating multiple terminations simultaneously * [#7644](https://github.com/netbox-community/netbox/issues/7644) - Prevent inadvertent deletion of prior change records when deleting objects (#7333 revisited) * [#7647](https://github.com/netbox-community/netbox/issues/7647) - Require interface assignment when designating IP address as primary for device/VM during CSV import +* [#7664](https://github.com/netbox-community/netbox/issues/7664) - Preserve initial form data when bulk edit validation fails * [#7717](https://github.com/netbox-community/netbox/issues/7717) - Restore missing tags column on IP range table --- diff --git a/netbox/netbox/views/generic.py b/netbox/netbox/views/generic.py index 75e978e2a..44e83f5ec 100644 --- a/netbox/netbox/views/generic.py +++ b/netbox/netbox/views/generic.py @@ -777,8 +777,21 @@ class BulkEditView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View): else: pk_list = request.POST.getlist('pk') + # Include the PK list as initial data for the form + initial_data = {'pk': pk_list} + + # Check for other contextual data needed for the form. We avoid passing all of request.GET because the + # filter values will conflict with the bulk edit form fields. + # TODO: Find a better way to accomplish this + if 'device' in request.GET: + initial_data['device'] = request.GET.get('device') + elif 'device_type' in request.GET: + initial_data['device_type'] = request.GET.get('device_type') + elif 'virtual_machine' in request.GET: + initial_data['virtual_machine'] = request.GET.get('virtual_machine') + if '_apply' in request.POST: - form = self.form(model, request.POST) + form = self.form(model, request.POST, initial=initial_data) restrict_form_fields(form, request.user) if form.is_valid(): @@ -867,18 +880,6 @@ class BulkEditView(GetReturnURLMixin, ObjectPermissionRequiredMixin, View): logger.debug("Form validation failed") else: - # Include the PK list as initial data for the form - initial_data = {'pk': pk_list} - - # Check for other contextual data needed for the form. We avoid passing all of request.GET because the - # filter values will conflict with the bulk edit form fields. - # TODO: Find a better way to accomplish this - if 'device' in request.GET: - initial_data['device'] = request.GET.get('device') - elif 'device_type' in request.GET: - initial_data['device_type'] = request.GET.get('device_type') - elif 'virtual_machine' in request.GET: - initial_data['virtual_machine'] = request.GET.get('virtual_machine') form = self.form(model, initial=initial_data) restrict_form_fields(form, request.user)