From 9d9cc8bbad00aa1ba7d057a6108a08f3202616a7 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Mon, 4 Nov 2024 08:50:54 -0800 Subject: [PATCH] remove old constants, update filtersets --- netbox/wireless/constants.py | 5 ----- netbox/wireless/forms/bulk_edit.py | 23 ++++------------------- netbox/wireless/forms/bulk_import.py | 12 +++--------- netbox/wireless/forms/filtersets.py | 27 +++++++++++++++++++++++++++ 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/netbox/wireless/constants.py b/netbox/wireless/constants.py index e12f87142..63de2b136 100644 --- a/netbox/wireless/constants.py +++ b/netbox/wireless/constants.py @@ -1,7 +1,2 @@ SSID_MAX_LENGTH = 32 # Per IEEE 802.11-2007 PSK_MAX_LENGTH = 64 - -# models values for ContentTypes which may be WirelessLAN scope types -WIRELESSLAN_SCOPE_TYPES = ( - 'region', 'sitegroup', 'site', 'location', -) diff --git a/netbox/wireless/forms/bulk_edit.py b/netbox/wireless/forms/bulk_edit.py index 09fd88f58..5cd3a157a 100644 --- a/netbox/wireless/forms/bulk_edit.py +++ b/netbox/wireless/forms/bulk_edit.py @@ -1,19 +1,17 @@ from django import forms -from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ from dcim.choices import LinkStatusChoices -from dcim.models import Site +from dcim.forms.mixins import ScopedBulkEditForm from ipam.models import VLAN from netbox.choices import * from netbox.forms import NetBoxModelBulkEditForm from tenancy.models import Tenant from utilities.forms import add_blank_choice -from utilities.forms.fields import CommentField, ContentTypeChoiceField, DynamicModelChoiceField +from utilities.forms.fields import CommentField, DynamicModelChoiceField from utilities.forms.rendering import FieldSet -from utilities.forms.widgets import HTMXSelect from wireless.choices import * -from wireless.constants import WIRELESSLAN_SCOPE_TYPES, SSID_MAX_LENGTH +from wireless.constants import SSID_MAX_LENGTH from wireless.models import * __all__ = ( @@ -42,7 +40,7 @@ class WirelessLANGroupBulkEditForm(NetBoxModelBulkEditForm): nullable_fields = ('parent', 'description') -class WirelessLANBulkEditForm(NetBoxModelBulkEditForm): +class WirelessLANBulkEditForm(ScopedBulkEditForm, NetBoxModelBulkEditForm): status = forms.ChoiceField( label=_('Status'), choices=add_blank_choice(WirelessLANStatusChoices), @@ -82,19 +80,6 @@ class WirelessLANBulkEditForm(NetBoxModelBulkEditForm): required=False, label=_('Pre-shared key') ) - scope_type = ContentTypeChoiceField( - queryset=ContentType.objects.filter(model__in=WIRELESSLAN_SCOPE_TYPES), - widget=HTMXSelect(method='post', attrs={'hx-select': '#form_fields'}), - required=False, - label=_('Scope type') - ) - scope = DynamicModelChoiceField( - label=_('Scope'), - queryset=Site.objects.none(), # Initial queryset - required=False, - disabled=True, - selector=True - ) description = forms.CharField( label=_('Description'), max_length=200, diff --git a/netbox/wireless/forms/bulk_import.py b/netbox/wireless/forms/bulk_import.py index 5c1041f54..2e8f81760 100644 --- a/netbox/wireless/forms/bulk_import.py +++ b/netbox/wireless/forms/bulk_import.py @@ -1,15 +1,14 @@ -from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ from dcim.choices import LinkStatusChoices +from dcim.forms.mixins import ScopedImportForm from dcim.models import Interface from ipam.models import VLAN from netbox.choices import * from netbox.forms import NetBoxModelImportForm from tenancy.models import Tenant -from utilities.forms.fields import CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, SlugField +from utilities.forms.fields import CSVChoiceField, CSVModelChoiceField, SlugField from wireless.choices import * -from wireless.constants import WIRELESSLAN_SCOPE_TYPES from wireless.models import * __all__ = ( @@ -34,7 +33,7 @@ class WirelessLANGroupImportForm(NetBoxModelImportForm): fields = ('name', 'slug', 'parent', 'description', 'tags') -class WirelessLANImportForm(NetBoxModelImportForm): +class WirelessLANImportForm(ScopedImportForm, NetBoxModelImportForm): group = CSVModelChoiceField( label=_('Group'), queryset=WirelessLANGroup.objects.all(), @@ -73,11 +72,6 @@ class WirelessLANImportForm(NetBoxModelImportForm): required=False, help_text=_('Authentication cipher') ) - scope_type = CSVContentTypeField( - queryset=ContentType.objects.filter(model__in=WIRELESSLAN_SCOPE_TYPES), - required=False, - label=_('Scope type (app & model)') - ) class Meta: model = WirelessLAN diff --git a/netbox/wireless/forms/filtersets.py b/netbox/wireless/forms/filtersets.py index 6439a2516..f62a3be06 100644 --- a/netbox/wireless/forms/filtersets.py +++ b/netbox/wireless/forms/filtersets.py @@ -2,6 +2,7 @@ from django import forms from django.utils.translation import gettext_lazy as _ from dcim.choices import LinkStatusChoices +from dcim.models import Location, Region, Site, SiteGroup from netbox.choices import * from netbox.forms import NetBoxModelFilterSetForm from tenancy.forms import TenancyFilterForm @@ -33,6 +34,7 @@ class WirelessLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('ssid', 'group_id', 'status', name=_('Attributes')), + FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Scope')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), FieldSet('auth_type', 'auth_cipher', 'auth_psk', name=_('Authentication')), ) @@ -65,6 +67,31 @@ class WirelessLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): label=_('Pre-shared key'), required=False ) + region_id = DynamicModelMultipleChoiceField( + queryset=Region.objects.all(), + required=False, + label=_('Region') + ) + site_group_id = DynamicModelMultipleChoiceField( + queryset=SiteGroup.objects.all(), + required=False, + label=_('Site group') + ) + site_id = DynamicModelMultipleChoiceField( + queryset=Site.objects.all(), + required=False, + null_option='None', + query_params={ + 'region_id': '$region_id', + 'site_group_id': '$site_group_id', + }, + label=_('Site') + ) + location_id = DynamicModelMultipleChoiceField( + queryset=Location.objects.all(), + required=False, + label=_('Location') + ) tag = TagFilterField(model)