From 9fddd193b92b4cb5b035502a9f8d5dc60fadf49d Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 22 Aug 2022 16:31:41 -0700 Subject: [PATCH 1/5] #10094 fix Contact AddAnother --- netbox/netbox/views/generic/object_views.py | 4 ++++ netbox/tenancy/views.py | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 5ff0cfdff..433e70b63 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -327,6 +327,9 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): """ return obj + def get_extra_addanother_params(self, request, params: dict): + return params + # # Request handlers # @@ -399,6 +402,7 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): # If cloning is supported, pre-populate a new instance of the form params = prepare_cloned_fields(obj) + params = self.get_extra_addanother_params(request, params) if params: if 'return_url' in request.GET: params['return_url'] = request.GET.get('return_url') diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 9a2fe6ab9..8b0f90f88 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -1,4 +1,5 @@ from django.contrib.contenttypes.models import ContentType +from django.http import QueryDict from django.shortcuts import get_object_or_404 from circuits.models import Circuit @@ -365,6 +366,15 @@ class ContactAssignmentEditView(generic.ObjectEditView): instance.object = get_object_or_404(content_type.model_class(), pk=request.GET.get('object_id')) return instance + def get_extra_addanother_params(self, request, params: dict): + if not params: + params = QueryDict(mutable=True) + + params['content_type'] = request.GET.get('content_type') + params['object_id'] = request.GET.get('object_id') + + return params + class ContactAssignmentDeleteView(generic.ObjectDeleteView): queryset = ContactAssignment.objects.all() From 41499b189c29bf9c7b07b3d7601637312b13d141 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 22 Aug 2022 16:33:50 -0700 Subject: [PATCH 2/5] #10094 fix Contact AddAnother --- netbox/utilities/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/utilities/utils.py b/netbox/utilities/utils.py index 1dece76c8..69ab615fc 100644 --- a/netbox/utilities/utils.py +++ b/netbox/utilities/utils.py @@ -285,7 +285,7 @@ def prepare_cloned_fields(instance): """ # Generate the clone attributes from the instance if not hasattr(instance, 'clone'): - return QueryDict() + return QueryDict(mutable=True) attrs = instance.clone() # Prepare querydict parameters From f48aaf1c465d0048606f486d9530631a33920a65 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 22 Aug 2022 16:47:40 -0700 Subject: [PATCH 3/5] #10094 fix Contact AddAnother --- netbox/netbox/views/generic/object_views.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 433e70b63..89f52e475 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -327,7 +327,10 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): """ return obj - def get_extra_addanother_params(self, request, params: dict): + def get_extra_addanother_params(self, request, params): + """ + Return a QueryDict of extra params to use on the Add Another button. + """ return params # From 8b1a462a6070cb6054af8bb59589c9a2e785afc2 Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 23 Aug 2022 09:29:55 -0700 Subject: [PATCH 4/5] #10094 changes from code review --- netbox/netbox/views/generic/object_views.py | 6 +++--- netbox/tenancy/views.py | 13 +++++-------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 89f52e475..6ef88bb2f 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -329,9 +329,9 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): def get_extra_addanother_params(self, request, params): """ - Return a QueryDict of extra params to use on the Add Another button. + Return a dictionary of extra parameters to use on the Add Another button. """ - return params + return {} # # Request handlers @@ -405,7 +405,7 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): # If cloning is supported, pre-populate a new instance of the form params = prepare_cloned_fields(obj) - params = self.get_extra_addanother_params(request, params) + params.update(self.get_extra_addanother_params(request)) if params: if 'return_url' in request.GET: params['return_url'] = request.GET.get('return_url') diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 8b0f90f88..e582c15d1 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -366,14 +366,11 @@ class ContactAssignmentEditView(generic.ObjectEditView): instance.object = get_object_or_404(content_type.model_class(), pk=request.GET.get('object_id')) return instance - def get_extra_addanother_params(self, request, params: dict): - if not params: - params = QueryDict(mutable=True) - - params['content_type'] = request.GET.get('content_type') - params['object_id'] = request.GET.get('object_id') - - return params + def get_extra_addanother_params(self, request): + return { + 'content_type': request.GET.get('content_type'), + 'object_id': request.GET.get('object_id'), + } class ContactAssignmentDeleteView(generic.ObjectDeleteView): From 1c46102c4a672079e4e61f33d5405ccb505fe54f Mon Sep 17 00:00:00 2001 From: Arthur Date: Tue, 23 Aug 2022 16:19:43 -0700 Subject: [PATCH 5/5] #10094 changes from code review --- netbox/netbox/views/generic/object_views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 6ef88bb2f..ece299f21 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -327,7 +327,7 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): """ return obj - def get_extra_addanother_params(self, request, params): + def get_extra_addanother_params(self, request): """ Return a dictionary of extra parameters to use on the Add Another button. """