diff --git a/netbox/netbox/filtersets.py b/netbox/netbox/filtersets.py index 934326fb6..5648e914a 100644 --- a/netbox/netbox/filtersets.py +++ b/netbox/netbox/filtersets.py @@ -25,6 +25,7 @@ __all__ = ( 'ChangeLoggedModelFilterSet', 'NetBoxModelFilterSet', 'OrganizationalModelFilterSet', + 'ScopedFilterSet', ) @@ -328,7 +329,7 @@ class OrganizationalModelFilterSet(NetBoxModelFilterSet): ) -class ScopeModelFilterSet(BaseFilterSet): +class ScopedFilterSet(BaseFilterSet): """ Provides additional filtering functionality for location, site, etc.. for Scoped models. """ diff --git a/netbox/netbox/forms/base.py b/netbox/netbox/forms/base.py index 722c95fc3..9a169592a 100644 --- a/netbox/netbox/forms/base.py +++ b/netbox/netbox/forms/base.py @@ -20,7 +20,7 @@ __all__ = ( 'NetBoxModelImportForm', 'NetBoxModelBulkEditForm', 'NetBoxModelFilterSetForm', - 'ScopeForm', + 'ScopedForm', ) @@ -191,7 +191,7 @@ class NetBoxModelFilterSetForm(CustomFieldsMixin, SavedFiltersMixin, forms.Form) return customfield.to_form_field(set_initial=False, enforce_required=False, enforce_visibility=False) -class ScopeForm(forms.Form): +class ScopedForm(forms.Form): def __init__(self, *args, **kwargs): instance = kwargs.get('instance') diff --git a/netbox/virtualization/filtersets.py b/netbox/virtualization/filtersets.py index 4bf019bb0..5f0362994 100644 --- a/netbox/virtualization/filtersets.py +++ b/netbox/virtualization/filtersets.py @@ -3,13 +3,13 @@ from django.db.models import Q from django.utils.translation import gettext as _ from dcim.filtersets import CommonInterfaceFilterSet -from dcim.models import Device, DeviceRole, Platform, Location, Region, Site, SiteGroup +from dcim.models import Device, DeviceRole, Platform, Region, Site, SiteGroup from extras.filtersets import LocalConfigContextFilterSet from extras.models import ConfigTemplate from ipam.filtersets import PrimaryIPFilterSet -from netbox.filtersets import OrganizationalModelFilterSet, NetBoxModelFilterSet +from netbox.filtersets import OrganizationalModelFilterSet, NetBoxModelFilterSet, ScopedFilterSet from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet -from utilities.filters import ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter +from utilities.filters import MultiValueCharFilter, MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter from .choices import * from .models import * @@ -37,58 +37,7 @@ class ClusterGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet) fields = ('id', 'name', 'slug', 'description') -class ClusterFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet): - scope_type = ContentTypeFilter() - region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.all(), - field_name='_region', - lookup_expr='in', - label=_('Region (ID)'), - ) - region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.all(), - field_name='_region', - lookup_expr='in', - to_field_name='slug', - label=_('Region (slug)'), - ) - site_group_id = TreeNodeMultipleChoiceFilter( - queryset=SiteGroup.objects.all(), - field_name='_sitegroup', - lookup_expr='in', - label=_('Site group (ID)'), - ) - site_group = TreeNodeMultipleChoiceFilter( - queryset=SiteGroup.objects.all(), - field_name='_sitegroup', - lookup_expr='in', - to_field_name='slug', - label=_('Site group (slug)'), - ) - site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.all(), - field_name='_site', - label=_('Site (ID)'), - ) - site = django_filters.ModelMultipleChoiceFilter( - field_name='_site__slug', - queryset=Site.objects.all(), - to_field_name='slug', - label=_('Site (slug)'), - ) - location_id = TreeNodeMultipleChoiceFilter( - queryset=Location.objects.all(), - field_name='_location', - lookup_expr='in', - label=_('Location (ID)'), - ) - location = TreeNodeMultipleChoiceFilter( - queryset=Location.objects.all(), - field_name='_location', - lookup_expr='in', - to_field_name='slug', - label=_('Location (slug)'), - ) +class ClusterFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ScopedFilterSet, ContactModelFilterSet): group_id = django_filters.ModelMultipleChoiceFilter( queryset=ClusterGroup.objects.all(), label=_('Parent group (ID)'), diff --git a/netbox/virtualization/forms/model_forms.py b/netbox/virtualization/forms/model_forms.py index b05dd27da..4550f0d61 100644 --- a/netbox/virtualization/forms/model_forms.py +++ b/netbox/virtualization/forms/model_forms.py @@ -7,7 +7,7 @@ from dcim.forms.common import InterfaceCommonForm from dcim.models import Device, DeviceRole, Platform, Rack, Region, Site, SiteGroup from extras.models import ConfigTemplate from ipam.models import IPAddress, VLAN, VLANGroup, VRF -from netbox.forms import NetBoxModelForm, ScopeForm +from netbox.forms import NetBoxModelForm, ScopedForm from tenancy.forms import TenancyForm from utilities.forms import ConfirmationForm from utilities.forms.fields import ( @@ -59,7 +59,7 @@ class ClusterGroupForm(NetBoxModelForm): ) -class ClusterForm(TenancyForm, ScopeForm, NetBoxModelForm): +class ClusterForm(TenancyForm, ScopedForm, NetBoxModelForm): type = DynamicModelChoiceField( label=_('Type'), queryset=ClusterType.objects.all()