From 4fe02a7be5b6a93b0eb6a343cf04998e343cb76d Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 25 Sep 2023 11:17:12 -0400 Subject: [PATCH] Fixes #13843: Fix scope assignment for VLAN groups during bulk edit --- netbox/ipam/forms/bulk_edit.py | 17 +++++++++++++++++ netbox/netbox/views/generic/bulk_views.py | 5 ++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/netbox/ipam/forms/bulk_edit.py b/netbox/ipam/forms/bulk_edit.py index e819f5ce8..f0a8286fc 100644 --- a/netbox/ipam/forms/bulk_edit.py +++ b/netbox/ipam/forms/bulk_edit.py @@ -431,6 +431,10 @@ class VLANGroupBulkEditForm(NetBoxModelBulkEditForm): queryset=ContentType.objects.filter(model__in=VLANGROUP_SCOPE_TYPES), required=False ) + scope_id = forms.IntegerField( + required=False, + widget=forms.HiddenInput() + ) region = DynamicModelChoiceField( label=_('Region'), queryset=Region.objects.all(), @@ -488,6 +492,19 @@ class VLANGroupBulkEditForm(NetBoxModelBulkEditForm): ) nullable_fields = ('description',) + def clean(self): + super().clean() + + # Assign scope based on scope_type + if self.cleaned_data.get('scope_type'): + scope_field = self.cleaned_data['scope_type'].model + if scope_obj := self.cleaned_data.get(scope_field): + self.cleaned_data['scope_id'] = scope_obj.pk + self.changed_data.append('scope_id') + else: + self.cleaned_data.pop('scope_type') + self.changed_data.remove('scope_type') + class VLANBulkEditForm(NetBoxModelBulkEditForm): region = DynamicModelChoiceField( diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index bef524bce..676e3f5af 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -3,6 +3,7 @@ import re from copy import deepcopy from django.contrib import messages +from django.contrib.contenttypes.fields import GenericRel from django.contrib.contenttypes.models import ContentType from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist, ValidationError from django.db import transaction, IntegrityError @@ -519,9 +520,11 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView): model_field = self.queryset.model._meta.get_field(name) if isinstance(model_field, (ManyToManyField, ManyToManyRel)): m2m_fields[name] = model_field + elif isinstance(model_field, GenericRel): + # Ignore generic relations (these may be used for other purposes in the form) + continue else: model_fields[name] = model_field - except FieldDoesNotExist: # This form field is used to modify a field rather than set its value directly model_fields[name] = None