From 25dc9cc14aca2caaa1119ec4c36112027c33e5b9 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Thu, 3 Mar 2022 16:18:24 -0500 Subject: [PATCH] Fixes #7891: Fix display of form validation failures during device component creation --- docs/release-notes/version-3.2.md | 1 + netbox/netbox/views/generic/object_views.py | 38 +++++++-------------- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/docs/release-notes/version-3.2.md b/docs/release-notes/version-3.2.md index 8419ec86d..dcdc2a6d1 100644 --- a/docs/release-notes/version-3.2.md +++ b/docs/release-notes/version-3.2.md @@ -157,6 +157,7 @@ Where it is desired to limit the range of available VLANs within a group, users * [#8761](https://github.com/netbox-community/netbox/issues/8761) - Correct view name resolution under journal entry views * [#8763](https://github.com/netbox-community/netbox/issues/8763) - Fix inventory item component assignment * [#8764](https://github.com/netbox-community/netbox/issues/8764) - Correct view name resolution for dynamic form fields +* [#8791](https://github.com/netbox-community/netbox/issues/8791) - Fix display of form validation failures during device component creation ### Other Changes diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 0140d9cd6..e97af20ac 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -559,31 +559,10 @@ class ComponentCreateView(GetReturnURLMixin, BaseObjectView): }) def post(self, request): + logger = logging.getLogger('netbox.views.ComponentCreateView') form, model_form = self.initialize_forms(request) instance = self.alter_object(self.queryset.model, request) - self.validate_form(request, form) - - if form.is_valid() and not form.errors: - if '_addanother' in request.POST: - return redirect(request.get_full_path()) - else: - return redirect(self.get_return_url(request)) - - return render(request, self.template_name, { - 'object': instance, - 'replication_form': form, - 'form': model_form, - 'return_url': self.get_return_url(request), - }) - - # TODO: Refactor this method for clarity & better error reporting - def validate_form(self, request, form): - """ - Validate form values and set errors on the form object as they are detected. If - no errors are found, signal success messages. - """ - logger = logging.getLogger('netbox.views.ComponentCreateView') if form.is_valid(): new_components = [] data = deepcopy(request.POST) @@ -618,8 +597,12 @@ class ComponentCreateView(GetReturnURLMixin, BaseObjectView): messages.success(request, "Added {} {}".format( len(new_components), self.queryset.model._meta.verbose_name_plural )) - # Return the newly created objects so overridden post methods can use the data as needed. - return new_objs + + # Redirect user on success + if '_addanother' in request.POST: + return redirect(request.get_full_path()) + else: + return redirect(self.get_return_url(request)) except PermissionsViolation: msg = "Component creation failed due to object-level permissions violation" @@ -627,4 +610,9 @@ class ComponentCreateView(GetReturnURLMixin, BaseObjectView): form.add_error(None, msg) clear_webhooks.send(sender=self) - return None + return render(request, self.template_name, { + 'object': instance, + 'replication_form': form, + 'form': model_form, + 'return_url': self.get_return_url(request), + })