Refactor register_filterset to be more generic and simple

This commit is contained in:
Jason Novinger 2025-11-20 13:06:08 -06:00
parent 84ba09bf02
commit ab5005ec09
23 changed files with 165 additions and 140 deletions

View File

@ -11,6 +11,7 @@ from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet
from utilities.filters import ( from utilities.filters import (
ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, TreeNodeMultipleChoiceFilter, ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, TreeNodeMultipleChoiceFilter,
) )
from utilities.filtersets import register_filterset
from .choices import * from .choices import *
from .models import * from .models import *
@ -29,6 +30,7 @@ __all__ = (
) )
@register_filterset
class ProviderFilterSet(PrimaryModelFilterSet, ContactModelFilterSet): class ProviderFilterSet(PrimaryModelFilterSet, ContactModelFilterSet):
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(), queryset=Region.objects.all(),
@ -93,6 +95,7 @@ class ProviderFilterSet(PrimaryModelFilterSet, ContactModelFilterSet):
) )
@register_filterset
class ProviderAccountFilterSet(PrimaryModelFilterSet, ContactModelFilterSet): class ProviderAccountFilterSet(PrimaryModelFilterSet, ContactModelFilterSet):
provider_id = django_filters.ModelMultipleChoiceFilter( provider_id = django_filters.ModelMultipleChoiceFilter(
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
@ -120,6 +123,7 @@ class ProviderAccountFilterSet(PrimaryModelFilterSet, ContactModelFilterSet):
).distinct() ).distinct()
@register_filterset
class ProviderNetworkFilterSet(PrimaryModelFilterSet): class ProviderNetworkFilterSet(PrimaryModelFilterSet):
provider_id = django_filters.ModelMultipleChoiceFilter( provider_id = django_filters.ModelMultipleChoiceFilter(
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
@ -147,6 +151,7 @@ class ProviderNetworkFilterSet(PrimaryModelFilterSet):
).distinct() ).distinct()
@register_filterset
class CircuitTypeFilterSet(OrganizationalModelFilterSet): class CircuitTypeFilterSet(OrganizationalModelFilterSet):
class Meta: class Meta:
@ -154,6 +159,7 @@ class CircuitTypeFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'color', 'description') fields = ('id', 'name', 'slug', 'color', 'description')
@register_filterset
class CircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class CircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
provider_id = django_filters.ModelMultipleChoiceFilter( provider_id = django_filters.ModelMultipleChoiceFilter(
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
@ -265,6 +271,7 @@ class CircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilt
).distinct() ).distinct()
@register_filterset
class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet): class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -360,6 +367,7 @@ class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet):
).distinct() ).distinct()
@register_filterset
class CircuitGroupFilterSet(OrganizationalModelFilterSet, TenancyFilterSet): class CircuitGroupFilterSet(OrganizationalModelFilterSet, TenancyFilterSet):
class Meta: class Meta:
@ -367,6 +375,7 @@ class CircuitGroupFilterSet(OrganizationalModelFilterSet, TenancyFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet): class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -466,6 +475,7 @@ class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet):
) )
@register_filterset
class VirtualCircuitTypeFilterSet(OrganizationalModelFilterSet): class VirtualCircuitTypeFilterSet(OrganizationalModelFilterSet):
class Meta: class Meta:
@ -473,6 +483,7 @@ class VirtualCircuitTypeFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'color', 'description') fields = ('id', 'name', 'slug', 'color', 'description')
@register_filterset
class VirtualCircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet): class VirtualCircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
provider_id = django_filters.ModelMultipleChoiceFilter( provider_id = django_filters.ModelMultipleChoiceFilter(
field_name='provider_network__provider', field_name='provider_network__provider',
@ -529,6 +540,7 @@ class VirtualCircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
).distinct() ).distinct()
@register_filterset
class VirtualCircuitTerminationFilterSet(NetBoxModelFilterSet): class VirtualCircuitTerminationFilterSet(NetBoxModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',

View File

@ -11,7 +11,7 @@ from ipam.models import ASN
from netbox.choices import DistanceUnitChoices from netbox.choices import DistanceUnitChoices
from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
from tenancy.forms import TenancyFilterForm, ContactModelFilterForm from tenancy.forms import TenancyFilterForm, ContactModelFilterForm
from utilities.forms import add_blank_choice, register_filterset from utilities.forms import add_blank_choice
from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import DatePicker, NumberWithOptions from utilities.forms.widgets import DatePicker, NumberWithOptions
@ -32,7 +32,6 @@ __all__ = (
) )
@register_filterset(ProviderFilterSet)
class ProviderFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm): class ProviderFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Provider model = Provider
fieldsets = ( fieldsets = (
@ -68,7 +67,6 @@ class ProviderFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ProviderAccountFilterSet)
class ProviderAccountFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm): class ProviderAccountFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
model = ProviderAccount model = ProviderAccount
fieldsets = ( fieldsets = (
@ -88,7 +86,6 @@ class ProviderAccountFilterForm(ContactModelFilterForm, PrimaryModelFilterSetFor
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ProviderNetworkFilterSet)
class ProviderNetworkFilterForm(PrimaryModelFilterSetForm): class ProviderNetworkFilterForm(PrimaryModelFilterSetForm):
model = ProviderNetwork model = ProviderNetwork
fieldsets = ( fieldsets = (
@ -108,7 +105,6 @@ class ProviderNetworkFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CircuitTypeFilterSet)
class CircuitTypeFilterForm(OrganizationalModelFilterSetForm): class CircuitTypeFilterForm(OrganizationalModelFilterSetForm):
model = CircuitType model = CircuitType
fieldsets = ( fieldsets = (
@ -123,7 +119,6 @@ class CircuitTypeFilterForm(OrganizationalModelFilterSetForm):
) )
@register_filterset(CircuitFilterSet)
class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Circuit model = Circuit
fieldsets = ( fieldsets = (
@ -223,7 +218,6 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelF
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CircuitTerminationFilterSet)
class CircuitTerminationFilterForm(NetBoxModelFilterSetForm): class CircuitTerminationFilterForm(NetBoxModelFilterSetForm):
model = CircuitTermination model = CircuitTermination
fieldsets = ( fieldsets = (
@ -278,7 +272,6 @@ class CircuitTerminationFilterForm(NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CircuitGroupFilterSet)
class CircuitGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm): class CircuitGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm):
model = CircuitGroup model = CircuitGroup
fieldsets = ( fieldsets = (
@ -288,7 +281,6 @@ class CircuitGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CircuitGroupAssignmentFilterSet)
class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm): class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm):
model = CircuitGroupAssignment model = CircuitGroupAssignment
fieldsets = ( fieldsets = (
@ -318,7 +310,6 @@ class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualCircuitTypeFilterSet)
class VirtualCircuitTypeFilterForm(OrganizationalModelFilterSetForm): class VirtualCircuitTypeFilterForm(OrganizationalModelFilterSetForm):
model = VirtualCircuitType model = VirtualCircuitType
fieldsets = ( fieldsets = (
@ -333,7 +324,6 @@ class VirtualCircuitTypeFilterForm(OrganizationalModelFilterSetForm):
) )
@register_filterset(VirtualCircuitFilterSet)
class VirtualCircuitFilterForm( class VirtualCircuitFilterForm(
TenancyFilterForm, TenancyFilterForm,
ContactModelFilterForm, ContactModelFilterForm,
@ -381,7 +371,6 @@ class VirtualCircuitFilterForm(
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualCircuitTerminationFilterSet)
class VirtualCircuitTerminationFilterForm(NetBoxModelFilterSetForm): class VirtualCircuitTerminationFilterForm(NetBoxModelFilterSetForm):
model = VirtualCircuitTermination model = VirtualCircuitTermination
fieldsets = ( fieldsets = (

View File

@ -7,6 +7,7 @@ from netbox.filtersets import BaseFilterSet, ChangeLoggedModelFilterSet, Primary
from netbox.utils import get_data_backend_choices from netbox.utils import get_data_backend_choices
from users.models import User from users.models import User
from utilities.filters import ContentTypeFilter from utilities.filters import ContentTypeFilter
from utilities.filtersets import register_filterset
from .choices import * from .choices import *
from .models import * from .models import *
@ -20,6 +21,7 @@ __all__ = (
) )
@register_filterset
class DataSourceFilterSet(PrimaryModelFilterSet): class DataSourceFilterSet(PrimaryModelFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=get_data_backend_choices, choices=get_data_backend_choices,
@ -48,6 +50,7 @@ class DataSourceFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class DataFileFilterSet(ChangeLoggedModelFilterSet): class DataFileFilterSet(ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search' method='search'
@ -75,6 +78,7 @@ class DataFileFilterSet(ChangeLoggedModelFilterSet):
) )
@register_filterset
class JobFilterSet(BaseFilterSet): class JobFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -139,6 +143,7 @@ class JobFilterSet(BaseFilterSet):
) )
@register_filterset
class ObjectTypeFilterSet(BaseFilterSet): class ObjectTypeFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -164,6 +169,7 @@ class ObjectTypeFilterSet(BaseFilterSet):
return queryset.filter(features__icontains=value) return queryset.filter(features__icontains=value)
@register_filterset
class ObjectChangeFilterSet(BaseFilterSet): class ObjectChangeFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -203,6 +209,7 @@ class ObjectChangeFilterSet(BaseFilterSet):
) )
@register_filterset
class ConfigRevisionFilterSet(BaseFilterSet): class ConfigRevisionFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',

View File

@ -7,7 +7,7 @@ from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm
from netbox.forms.mixins import SavedFiltersMixin from netbox.forms.mixins import SavedFiltersMixin
from netbox.utils import get_data_backend_choices from netbox.utils import get_data_backend_choices
from users.models import User from users.models import User
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
from utilities.forms.fields import ( from utilities.forms.fields import (
ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField, ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
) )
@ -24,7 +24,6 @@ __all__ = (
) )
@register_filterset(DataSourceFilterSet)
class DataSourceFilterForm(PrimaryModelFilterSetForm): class DataSourceFilterForm(PrimaryModelFilterSetForm):
model = DataSource model = DataSource
fieldsets = ( fieldsets = (
@ -56,7 +55,6 @@ class DataSourceFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(DataFileFilterSet)
class DataFileFilterForm(NetBoxModelFilterSetForm): class DataFileFilterForm(NetBoxModelFilterSetForm):
model = DataFile model = DataFile
fieldsets = ( fieldsets = (
@ -70,7 +68,6 @@ class DataFileFilterForm(NetBoxModelFilterSetForm):
) )
@register_filterset(JobFilterSet)
class JobFilterForm(SavedFiltersMixin, FilterForm): class JobFilterForm(SavedFiltersMixin, FilterForm):
model = Job model = Job
fieldsets = ( fieldsets = (
@ -138,7 +135,6 @@ class JobFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(ObjectChangeFilterSet)
class ObjectChangeFilterForm(SavedFiltersMixin, FilterForm): class ObjectChangeFilterForm(SavedFiltersMixin, FilterForm):
model = ObjectChange model = ObjectChange
fieldsets = ( fieldsets = (
@ -173,7 +169,6 @@ class ObjectChangeFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(ConfigRevisionFilterSet)
class ConfigRevisionFilterForm(SavedFiltersMixin, FilterForm): class ConfigRevisionFilterForm(SavedFiltersMixin, FilterForm):
model = ConfigRevision model = ConfigRevision
fieldsets = ( fieldsets = (

View File

@ -22,6 +22,7 @@ from utilities.filters import (
ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, MultiValueWWNFilter, ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, MultiValueWWNFilter,
NumericArrayFilter, TreeNodeMultipleChoiceFilter, NumericArrayFilter, TreeNodeMultipleChoiceFilter,
) )
from utilities.filtersets import register_filterset
from virtualization.models import Cluster, ClusterGroup, VirtualMachine, VMInterface from virtualization.models import Cluster, ClusterGroup, VirtualMachine, VMInterface
from vpn.models import L2VPN from vpn.models import L2VPN
from wireless.choices import WirelessChannelChoices, WirelessRoleChoices from wireless.choices import WirelessChannelChoices, WirelessRoleChoices
@ -84,6 +85,7 @@ __all__ = (
) )
@register_filterset
class RegionFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet): class RegionFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=Region.objects.all(), queryset=Region.objects.all(),
@ -114,6 +116,7 @@ class RegionFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class SiteGroupFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet): class SiteGroupFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=SiteGroup.objects.all(), queryset=SiteGroup.objects.all(),
@ -144,6 +147,7 @@ class SiteGroupFilterSet(NestedGroupModelFilterSet, ContactModelFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class SiteFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class SiteFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=SiteStatusChoices, choices=SiteStatusChoices,
@ -208,6 +212,7 @@ class SiteFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterS
return queryset.filter(qs_filter).distinct() return queryset.filter(qs_filter).distinct()
@register_filterset
class LocationFilterSet(TenancyFilterSet, ContactModelFilterSet, NestedGroupModelFilterSet): class LocationFilterSet(TenancyFilterSet, ContactModelFilterSet, NestedGroupModelFilterSet):
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(), queryset=Region.objects.all(),
@ -287,6 +292,7 @@ class LocationFilterSet(TenancyFilterSet, ContactModelFilterSet, NestedGroupMode
return queryset return queryset
@register_filterset
class RackRoleFilterSet(OrganizationalModelFilterSet): class RackRoleFilterSet(OrganizationalModelFilterSet):
class Meta: class Meta:
@ -294,6 +300,7 @@ class RackRoleFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'color', 'description') fields = ('id', 'name', 'slug', 'color', 'description')
@register_filterset
class RackTypeFilterSet(PrimaryModelFilterSet): class RackTypeFilterSet(PrimaryModelFilterSet):
manufacturer_id = django_filters.ModelMultipleChoiceFilter( manufacturer_id = django_filters.ModelMultipleChoiceFilter(
queryset=Manufacturer.objects.all(), queryset=Manufacturer.objects.all(),
@ -332,6 +339,7 @@ class RackTypeFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class RackFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class RackFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(), queryset=Region.objects.all(),
@ -448,6 +456,7 @@ class RackFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterS
) )
@register_filterset
class RackReservationFilterSet(PrimaryModelFilterSet, TenancyFilterSet): class RackReservationFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
rack_id = django_filters.ModelMultipleChoiceFilter( rack_id = django_filters.ModelMultipleChoiceFilter(
queryset=Rack.objects.all(), queryset=Rack.objects.all(),
@ -537,6 +546,7 @@ class RackReservationFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
) )
@register_filterset
class ManufacturerFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet): class ManufacturerFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
class Meta: class Meta:
@ -544,6 +554,7 @@ class ManufacturerFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet)
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class DeviceTypeFilterSet(PrimaryModelFilterSet): class DeviceTypeFilterSet(PrimaryModelFilterSet):
manufacturer_id = django_filters.ModelMultipleChoiceFilter( manufacturer_id = django_filters.ModelMultipleChoiceFilter(
queryset=Manufacturer.objects.all(), queryset=Manufacturer.objects.all(),
@ -687,6 +698,7 @@ class DeviceTypeFilterSet(PrimaryModelFilterSet):
return queryset.exclude(inventoryitemtemplates__isnull=value) return queryset.exclude(inventoryitemtemplates__isnull=value)
@register_filterset
class ModuleTypeProfileFilterSet(PrimaryModelFilterSet): class ModuleTypeProfileFilterSet(PrimaryModelFilterSet):
class Meta: class Meta:
@ -703,6 +715,7 @@ class ModuleTypeProfileFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class ModuleTypeFilterSet(AttributeFiltersMixin, PrimaryModelFilterSet): class ModuleTypeFilterSet(AttributeFiltersMixin, PrimaryModelFilterSet):
profile_id = django_filters.ModelMultipleChoiceFilter( profile_id = django_filters.ModelMultipleChoiceFilter(
queryset=ModuleTypeProfile.objects.all(), queryset=ModuleTypeProfile.objects.all(),
@ -819,6 +832,7 @@ class ModularDeviceTypeComponentFilterSet(DeviceTypeComponentFilterSet):
) )
@register_filterset
class ConsolePortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class ConsolePortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
class Meta: class Meta:
@ -826,6 +840,7 @@ class ConsolePortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceType
fields = ('id', 'name', 'label', 'type', 'description') fields = ('id', 'name', 'label', 'type', 'description')
@register_filterset
class ConsoleServerPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class ConsoleServerPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
class Meta: class Meta:
@ -833,6 +848,7 @@ class ConsoleServerPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDevi
fields = ('id', 'name', 'label', 'type', 'description') fields = ('id', 'name', 'label', 'type', 'description')
@register_filterset
class PowerPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class PowerPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
class Meta: class Meta:
@ -840,6 +856,7 @@ class PowerPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
fields = ('id', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description') fields = ('id', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description')
@register_filterset
class PowerOutletTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class PowerOutletTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
feed_leg = django_filters.MultipleChoiceFilter( feed_leg = django_filters.MultipleChoiceFilter(
choices=PowerOutletFeedLegChoices, choices=PowerOutletFeedLegChoices,
@ -855,6 +872,7 @@ class PowerOutletTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceType
fields = ('id', 'name', 'label', 'type', 'color', 'feed_leg', 'description') fields = ('id', 'name', 'label', 'type', 'color', 'feed_leg', 'description')
@register_filterset
class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=InterfaceTypeChoices, choices=InterfaceTypeChoices,
@ -879,6 +897,7 @@ class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
fields = ('id', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description') fields = ('id', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description')
@register_filterset
class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PortTypeChoices, choices=PortTypeChoices,
@ -893,6 +912,7 @@ class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
fields = ('id', 'name', 'label', 'type', 'color', 'rear_port_position', 'description') fields = ('id', 'name', 'label', 'type', 'color', 'rear_port_position', 'description')
@register_filterset
class RearPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class RearPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PortTypeChoices, choices=PortTypeChoices,
@ -904,6 +924,7 @@ class RearPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCom
fields = ('id', 'name', 'label', 'type', 'color', 'positions', 'description') fields = ('id', 'name', 'label', 'type', 'color', 'positions', 'description')
@register_filterset
class ModuleBayTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet): class ModuleBayTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
class Meta: class Meta:
@ -911,6 +932,7 @@ class ModuleBayTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
fields = ('id', 'name', 'label', 'position', 'description') fields = ('id', 'name', 'label', 'position', 'description')
@register_filterset
class DeviceBayTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet): class DeviceBayTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
class Meta: class Meta:
@ -918,6 +940,7 @@ class DeviceBayTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponent
fields = ('id', 'name', 'label', 'description') fields = ('id', 'name', 'label', 'description')
@register_filterset
class InventoryItemTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet): class InventoryItemTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeComponentFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=InventoryItemTemplate.objects.all(), queryset=InventoryItemTemplate.objects.all(),
@ -961,6 +984,7 @@ class InventoryItemTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeCompo
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class DeviceRoleFilterSet(NestedGroupModelFilterSet): class DeviceRoleFilterSet(NestedGroupModelFilterSet):
config_template_id = django_filters.ModelMultipleChoiceFilter( config_template_id = django_filters.ModelMultipleChoiceFilter(
queryset=ConfigTemplate.objects.all(), queryset=ConfigTemplate.objects.all(),
@ -995,6 +1019,7 @@ class DeviceRoleFilterSet(NestedGroupModelFilterSet):
fields = ('id', 'name', 'slug', 'color', 'vm_role', 'description') fields = ('id', 'name', 'slug', 'color', 'vm_role', 'description')
@register_filterset
class PlatformFilterSet(NestedGroupModelFilterSet): class PlatformFilterSet(NestedGroupModelFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=Platform.objects.all(), queryset=Platform.objects.all(),
@ -1052,6 +1077,7 @@ class PlatformFilterSet(NestedGroupModelFilterSet):
return queryset.filter(Q(manufacturer=None) | Q(manufacturer__device_types=value)) return queryset.filter(Q(manufacturer=None) | Q(manufacturer__device_types=value))
@register_filterset
class DeviceFilterSet( class DeviceFilterSet(
PrimaryModelFilterSet, PrimaryModelFilterSet,
TenancyFilterSet, TenancyFilterSet,
@ -1354,6 +1380,7 @@ class DeviceFilterSet(
return queryset.exclude(params) return queryset.exclude(params)
@register_filterset
class VirtualDeviceContextFilterSet(PrimaryModelFilterSet, TenancyFilterSet, PrimaryIPFilterSet): class VirtualDeviceContextFilterSet(PrimaryModelFilterSet, TenancyFilterSet, PrimaryIPFilterSet):
device_id = django_filters.ModelMultipleChoiceFilter( device_id = django_filters.ModelMultipleChoiceFilter(
field_name='device', field_name='device',
@ -1403,6 +1430,7 @@ class VirtualDeviceContextFilterSet(PrimaryModelFilterSet, TenancyFilterSet, Pri
return queryset.exclude(params) return queryset.exclude(params)
@register_filterset
class ModuleFilterSet(PrimaryModelFilterSet): class ModuleFilterSet(PrimaryModelFilterSet):
manufacturer_id = django_filters.ModelMultipleChoiceFilter( manufacturer_id = django_filters.ModelMultipleChoiceFilter(
field_name='module_type__manufacturer', field_name='module_type__manufacturer',
@ -1691,6 +1719,7 @@ class PathEndpointFilterSet(django_filters.FilterSet):
return queryset.filter(Q(_path__isnull=True) | Q(_path__is_active=False)) return queryset.filter(Q(_path__isnull=True) | Q(_path__is_active=False))
@register_filterset
class ConsolePortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet): class ConsolePortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=ConsolePortTypeChoices, choices=ConsolePortTypeChoices,
@ -1702,6 +1731,7 @@ class ConsolePortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSe
fields = ('id', 'name', 'label', 'speed', 'description', 'mark_connected', 'cable_end', 'cable_position') fields = ('id', 'name', 'label', 'speed', 'description', 'mark_connected', 'cable_end', 'cable_position')
@register_filterset
class ConsoleServerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet): class ConsoleServerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=ConsolePortTypeChoices, choices=ConsolePortTypeChoices,
@ -1713,6 +1743,7 @@ class ConsoleServerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFi
fields = ('id', 'name', 'label', 'speed', 'description', 'mark_connected', 'cable_end', 'cable_position') fields = ('id', 'name', 'label', 'speed', 'description', 'mark_connected', 'cable_end', 'cable_position')
@register_filterset
class PowerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet): class PowerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PowerPortTypeChoices, choices=PowerPortTypeChoices,
@ -1727,6 +1758,7 @@ class PowerPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet,
) )
@register_filterset
class PowerOutletFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet): class PowerOutletFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet, PathEndpointFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PowerOutletTypeChoices, choices=PowerOutletTypeChoices,
@ -1753,6 +1785,7 @@ class PowerOutletFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSe
) )
@register_filterset
class MACAddressFilterSet(PrimaryModelFilterSet): class MACAddressFilterSet(PrimaryModelFilterSet):
mac_address = MultiValueMACAddressFilter() mac_address = MultiValueMACAddressFilter()
assigned_object_type = ContentTypeFilter() assigned_object_type = ContentTypeFilter()
@ -1934,6 +1967,7 @@ class CommonInterfaceFilterSet(django_filters.FilterSet):
) )
@register_filterset
class InterfaceFilterSet( class InterfaceFilterSet(
ModularDeviceComponentFilterSet, ModularDeviceComponentFilterSet,
CabledObjectFilterSet, CabledObjectFilterSet,
@ -2096,6 +2130,7 @@ class InterfaceFilterSet(
) )
@register_filterset
class FrontPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet): class FrontPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PortTypeChoices, choices=PortTypeChoices,
@ -2113,6 +2148,7 @@ class FrontPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet)
) )
@register_filterset
class RearPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet): class RearPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=PortTypeChoices, choices=PortTypeChoices,
@ -2127,6 +2163,7 @@ class RearPortFilterSet(ModularDeviceComponentFilterSet, CabledObjectFilterSet):
) )
@register_filterset
class ModuleBayFilterSet(ModularDeviceComponentFilterSet): class ModuleBayFilterSet(ModularDeviceComponentFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=ModuleBay.objects.all(), queryset=ModuleBay.objects.all(),
@ -2143,6 +2180,7 @@ class ModuleBayFilterSet(ModularDeviceComponentFilterSet):
fields = ('id', 'name', 'label', 'position', 'description') fields = ('id', 'name', 'label', 'position', 'description')
@register_filterset
class DeviceBayFilterSet(DeviceComponentFilterSet): class DeviceBayFilterSet(DeviceComponentFilterSet):
installed_device_id = django_filters.ModelMultipleChoiceFilter( installed_device_id = django_filters.ModelMultipleChoiceFilter(
queryset=Device.objects.all(), queryset=Device.objects.all(),
@ -2160,6 +2198,7 @@ class DeviceBayFilterSet(DeviceComponentFilterSet):
fields = ('id', 'name', 'label', 'description') fields = ('id', 'name', 'label', 'description')
@register_filterset
class InventoryItemFilterSet(DeviceComponentFilterSet): class InventoryItemFilterSet(DeviceComponentFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=InventoryItem.objects.all(), queryset=InventoryItem.objects.all(),
@ -2212,6 +2251,7 @@ class InventoryItemFilterSet(DeviceComponentFilterSet):
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class InventoryItemRoleFilterSet(OrganizationalModelFilterSet): class InventoryItemRoleFilterSet(OrganizationalModelFilterSet):
class Meta: class Meta:
@ -2219,6 +2259,7 @@ class InventoryItemRoleFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'color', 'description') fields = ('id', 'name', 'slug', 'color', 'description')
@register_filterset
class VirtualChassisFilterSet(PrimaryModelFilterSet): class VirtualChassisFilterSet(PrimaryModelFilterSet):
master_id = django_filters.ModelMultipleChoiceFilter( master_id = django_filters.ModelMultipleChoiceFilter(
queryset=Device.objects.all(), queryset=Device.objects.all(),
@ -2295,6 +2336,7 @@ class VirtualChassisFilterSet(PrimaryModelFilterSet):
return queryset.filter(qs_filter).distinct() return queryset.filter(qs_filter).distinct()
@register_filterset
class CableFilterSet(TenancyFilterSet, PrimaryModelFilterSet): class CableFilterSet(TenancyFilterSet, PrimaryModelFilterSet):
termination_a_type = ContentTypeFilter( termination_a_type = ContentTypeFilter(
field_name='terminations__termination_type' field_name='terminations__termination_type'
@ -2467,6 +2509,7 @@ class CableFilterSet(TenancyFilterSet, PrimaryModelFilterSet):
return self.filter_by_termination_object(queryset, CircuitTermination, value) return self.filter_by_termination_object(queryset, CircuitTermination, value)
@register_filterset
class CableTerminationFilterSet(ChangeLoggedModelFilterSet): class CableTerminationFilterSet(ChangeLoggedModelFilterSet):
termination_type = ContentTypeFilter() termination_type = ContentTypeFilter()
@ -2475,6 +2518,7 @@ class CableTerminationFilterSet(ChangeLoggedModelFilterSet):
fields = ('id', 'cable', 'cable_end', 'position', 'termination_type', 'termination_id') fields = ('id', 'cable', 'cable_end', 'position', 'termination_type', 'termination_id')
@register_filterset
class PowerPanelFilterSet(PrimaryModelFilterSet, ContactModelFilterSet): class PowerPanelFilterSet(PrimaryModelFilterSet, ContactModelFilterSet):
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(), queryset=Region.objects.all(),
@ -2533,6 +2577,7 @@ class PowerPanelFilterSet(PrimaryModelFilterSet, ContactModelFilterSet):
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class PowerFeedFilterSet(PrimaryModelFilterSet, CabledObjectFilterSet, PathEndpointFilterSet, TenancyFilterSet): class PowerFeedFilterSet(PrimaryModelFilterSet, CabledObjectFilterSet, PathEndpointFilterSet, TenancyFilterSet):
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(), queryset=Region.objects.all(),
@ -2645,6 +2690,7 @@ class ConnectionFilterSet(BaseFilterSet):
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class ConsoleConnectionFilterSet(ConnectionFilterSet): class ConsoleConnectionFilterSet(ConnectionFilterSet):
class Meta: class Meta:
@ -2652,6 +2698,7 @@ class ConsoleConnectionFilterSet(ConnectionFilterSet):
fields = ('name',) fields = ('name',)
@register_filterset
class PowerConnectionFilterSet(ConnectionFilterSet): class PowerConnectionFilterSet(ConnectionFilterSet):
class Meta: class Meta:
@ -2659,6 +2706,7 @@ class PowerConnectionFilterSet(ConnectionFilterSet):
fields = ('name',) fields = ('name',)
@register_filterset
class InterfaceConnectionFilterSet(ConnectionFilterSet): class InterfaceConnectionFilterSet(ConnectionFilterSet):
class Meta: class Meta:

View File

@ -15,7 +15,7 @@ from netbox.forms import (
) )
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from users.models import Owner, User from users.models import Owner, User
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
from utilities.forms.fields import ColorField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import ColorField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import NumberWithOptions from utilities.forms.widgets import NumberWithOptions
@ -148,7 +148,6 @@ class DeviceComponentFilterForm(NetBoxModelFilterSetForm):
) )
@register_filterset(RegionFilterSet)
class RegionFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm): class RegionFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = Region model = Region
fieldsets = ( fieldsets = (
@ -164,7 +163,6 @@ class RegionFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(SiteGroupFilterSet)
class SiteGroupFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm): class SiteGroupFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = SiteGroup model = SiteGroup
fieldsets = ( fieldsets = (
@ -180,7 +178,6 @@ class SiteGroupFilterForm(ContactModelFilterForm, NestedGroupModelFilterSetForm)
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(SiteFilterSet)
class SiteFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): class SiteFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Site model = Site
fieldsets = ( fieldsets = (
@ -213,7 +210,6 @@ class SiteFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilt
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(LocationFilterSet)
class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NestedGroupModelFilterSetForm): class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = Location model = Location
fieldsets = ( fieldsets = (
@ -262,7 +258,6 @@ class LocationFilterForm(TenancyFilterForm, ContactModelFilterForm, NestedGroupM
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RackRoleFilterSet)
class RackRoleFilterForm(OrganizationalModelFilterSetForm): class RackRoleFilterForm(OrganizationalModelFilterSetForm):
model = RackRole model = RackRole
fieldsets = ( fieldsets = (
@ -314,7 +309,6 @@ class RackBaseFilterForm(PrimaryModelFilterSetForm):
) )
@register_filterset(RackTypeFilterSet)
class RackTypeFilterForm(RackBaseFilterForm): class RackTypeFilterForm(RackBaseFilterForm):
model = RackType model = RackType
fieldsets = ( fieldsets = (
@ -337,7 +331,6 @@ class RackTypeFilterForm(RackBaseFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RackFilterSet)
class RackFilterForm(TenancyFilterForm, ContactModelFilterForm, RackBaseFilterForm): class RackFilterForm(TenancyFilterForm, ContactModelFilterForm, RackBaseFilterForm):
model = Rack model = Rack
fieldsets = ( fieldsets = (
@ -439,7 +432,6 @@ class RackElevationFilterForm(RackFilterForm):
) )
@register_filterset(RackReservationFilterSet)
class RackReservationFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class RackReservationFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = RackReservation model = RackReservation
fieldsets = ( fieldsets = (
@ -498,7 +490,6 @@ class RackReservationFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ManufacturerFilterSet)
class ManufacturerFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm): class ManufacturerFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = Manufacturer model = Manufacturer
fieldsets = ( fieldsets = (
@ -508,7 +499,6 @@ class ManufacturerFilterForm(ContactModelFilterForm, OrganizationalModelFilterSe
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(DeviceTypeFilterSet)
class DeviceTypeFilterForm(PrimaryModelFilterSetForm): class DeviceTypeFilterForm(PrimaryModelFilterSetForm):
model = DeviceType model = DeviceType
fieldsets = ( fieldsets = (
@ -643,7 +633,6 @@ class DeviceTypeFilterForm(PrimaryModelFilterSetForm):
) )
@register_filterset(ModuleTypeProfileFilterSet)
class ModuleTypeProfileFilterForm(PrimaryModelFilterSetForm): class ModuleTypeProfileFilterForm(PrimaryModelFilterSetForm):
model = ModuleTypeProfile model = ModuleTypeProfile
fieldsets = ( fieldsets = (
@ -653,7 +642,6 @@ class ModuleTypeProfileFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ModuleTypeFilterSet)
class ModuleTypeFilterForm(PrimaryModelFilterSetForm): class ModuleTypeFilterForm(PrimaryModelFilterSetForm):
model = ModuleType model = ModuleType
fieldsets = ( fieldsets = (
@ -747,7 +735,6 @@ class ModuleTypeFilterForm(PrimaryModelFilterSetForm):
) )
@register_filterset(DeviceRoleFilterSet)
class DeviceRoleFilterForm(NestedGroupModelFilterSetForm): class DeviceRoleFilterForm(NestedGroupModelFilterSetForm):
model = DeviceRole model = DeviceRole
fieldsets = ( fieldsets = (
@ -767,7 +754,6 @@ class DeviceRoleFilterForm(NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PlatformFilterSet)
class PlatformFilterForm(NestedGroupModelFilterSetForm): class PlatformFilterForm(NestedGroupModelFilterSetForm):
model = Platform model = Platform
fieldsets = ( fieldsets = (
@ -793,7 +779,6 @@ class PlatformFilterForm(NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(DeviceFilterSet)
class DeviceFilterForm( class DeviceFilterForm(
LocalConfigContextFilterForm, LocalConfigContextFilterForm,
TenancyFilterForm, TenancyFilterForm,
@ -992,7 +977,6 @@ class DeviceFilterForm(
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualDeviceContextFilterSet)
class VirtualDeviceContextFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class VirtualDeviceContextFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = VirtualDeviceContext model = VirtualDeviceContext
fieldsets = ( fieldsets = (
@ -1020,7 +1004,6 @@ class VirtualDeviceContextFilterForm(TenancyFilterForm, PrimaryModelFilterSetFor
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ModuleFilterSet)
class ModuleFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class ModuleFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Module model = Module
fieldsets = ( fieldsets = (
@ -1104,7 +1087,6 @@ class ModuleFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, PrimaryM
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualChassisFilterSet)
class VirtualChassisFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class VirtualChassisFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = VirtualChassis model = VirtualChassis
fieldsets = ( fieldsets = (
@ -1134,7 +1116,6 @@ class VirtualChassisFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(CableFilterSet)
class CableFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class CableFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = Cable model = Cable
fieldsets = ( fieldsets = (
@ -1224,7 +1205,6 @@ class CableFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PowerPanelFilterSet)
class PowerPanelFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm): class PowerPanelFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
model = PowerPanel model = PowerPanel
fieldsets = ( fieldsets = (
@ -1264,7 +1244,6 @@ class PowerPanelFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PowerFeedFilterSet)
class PowerFeedFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class PowerFeedFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = PowerFeed model = PowerFeed
fieldsets = ( fieldsets = (
@ -1375,7 +1354,6 @@ class PathEndpointFilterForm(CabledFilterForm):
) )
@register_filterset(ConsolePortFilterSet)
class ConsolePortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): class ConsolePortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
model = ConsolePort model = ConsolePort
fieldsets = ( fieldsets = (
@ -1400,7 +1378,6 @@ class ConsolePortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ConsoleServerPortFilterSet)
class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
model = ConsoleServerPort model = ConsoleServerPort
fieldsets = ( fieldsets = (
@ -1426,7 +1403,6 @@ class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterF
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PowerPortFilterSet)
class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
model = PowerPort model = PowerPort
fieldsets = ( fieldsets = (
@ -1446,7 +1422,6 @@ class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PowerOutletFilterSet)
class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
model = PowerOutlet model = PowerOutlet
fieldsets = ( fieldsets = (
@ -1476,7 +1451,6 @@ class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
) )
@register_filterset(InterfaceFilterSet)
class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
model = Interface model = Interface
fieldsets = ( fieldsets = (
@ -1603,7 +1577,6 @@ class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(FrontPortFilterSet)
class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm):
fieldsets = ( fieldsets = (
FieldSet('q', 'filter_id', 'tag', 'owner_id'), FieldSet('q', 'filter_id', 'tag', 'owner_id'),
@ -1627,7 +1600,6 @@ class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RearPortFilterSet)
class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm):
model = RearPort model = RearPort
fieldsets = ( fieldsets = (
@ -1652,7 +1624,6 @@ class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ModuleBayFilterSet)
class ModuleBayFilterForm(DeviceComponentFilterForm): class ModuleBayFilterForm(DeviceComponentFilterForm):
model = ModuleBay model = ModuleBay
fieldsets = ( fieldsets = (
@ -1671,7 +1642,6 @@ class ModuleBayFilterForm(DeviceComponentFilterForm):
) )
@register_filterset(DeviceBayFilterSet)
class DeviceBayFilterForm(DeviceComponentFilterForm): class DeviceBayFilterForm(DeviceComponentFilterForm):
model = DeviceBay model = DeviceBay
fieldsets = ( fieldsets = (
@ -1686,7 +1656,6 @@ class DeviceBayFilterForm(DeviceComponentFilterForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(InventoryItemFilterSet)
class InventoryItemFilterForm(DeviceComponentFilterForm): class InventoryItemFilterForm(DeviceComponentFilterForm):
model = InventoryItem model = InventoryItem
fieldsets = ( fieldsets = (
@ -1738,7 +1707,6 @@ class InventoryItemFilterForm(DeviceComponentFilterForm):
# Device component roles # Device component roles
# #
@register_filterset(InventoryItemRoleFilterSet)
class InventoryItemRoleFilterForm(OrganizationalModelFilterSetForm): class InventoryItemRoleFilterForm(OrganizationalModelFilterSetForm):
model = InventoryItemRole model = InventoryItemRole
fieldsets = ( fieldsets = (
@ -1751,7 +1719,6 @@ class InventoryItemRoleFilterForm(OrganizationalModelFilterSetForm):
# Addressing # Addressing
# #
@register_filterset(MACAddressFilterSet)
class MACAddressFilterForm(PrimaryModelFilterSetForm): class MACAddressFilterForm(PrimaryModelFilterSetForm):
model = MACAddress model = MACAddress
fieldsets = ( fieldsets = (

View File

@ -12,6 +12,7 @@ from users.models import Group, User
from utilities.filters import ( from utilities.filters import (
ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter
) )
from utilities.filtersets import register_filterset
from virtualization.models import Cluster, ClusterGroup, ClusterType from virtualization.models import Cluster, ClusterGroup, ClusterType
from .choices import * from .choices import *
from .filters import TagFilter, TagIDFilter from .filters import TagFilter, TagIDFilter
@ -40,6 +41,7 @@ __all__ = (
) )
@register_filterset
class ScriptFilterSet(BaseFilterSet): class ScriptFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -62,6 +64,7 @@ class ScriptFilterSet(BaseFilterSet):
) )
@register_filterset
class WebhookFilterSet(OwnerFilterMixin, NetBoxModelFilterSet): class WebhookFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -91,6 +94,7 @@ class WebhookFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
) )
@register_filterset
class EventRuleFilterSet(OwnerFilterMixin, NetBoxModelFilterSet): class EventRuleFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -131,6 +135,7 @@ class EventRuleFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
return queryset.filter(event_types__overlap=value) return queryset.filter(event_types__overlap=value)
@register_filterset
class CustomFieldFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet): class CustomFieldFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -180,6 +185,7 @@ class CustomFieldFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
) )
@register_filterset
class CustomFieldChoiceSetFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet): class CustomFieldChoiceSetFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -208,6 +214,7 @@ class CustomFieldChoiceSetFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet
return queryset.filter(extra_choices__overlap=value) return queryset.filter(extra_choices__overlap=value)
@register_filterset
class CustomLinkFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet): class CustomLinkFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -238,6 +245,7 @@ class CustomLinkFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
) )
@register_filterset
class ExportTemplateFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet): class ExportTemplateFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -276,6 +284,7 @@ class ExportTemplateFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
) )
@register_filterset
class SavedFilterFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet): class SavedFilterFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -328,6 +337,7 @@ class SavedFilterFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
return queryset.filter(Q(enabled=False) | Q(Q(shared=False) & ~Q(user=user))) return queryset.filter(Q(enabled=False) | Q(Q(shared=False) & ~Q(user=user)))
@register_filterset
class TableConfigFilterSet(ChangeLoggedModelFilterSet): class TableConfigFilterSet(ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -381,6 +391,7 @@ class TableConfigFilterSet(ChangeLoggedModelFilterSet):
return queryset.filter(Q(enabled=False) | Q(Q(shared=False) & ~Q(user=user))) return queryset.filter(Q(enabled=False) | Q(Q(shared=False) & ~Q(user=user)))
@register_filterset
class BookmarkFilterSet(BaseFilterSet): class BookmarkFilterSet(BaseFilterSet):
created = django_filters.DateTimeFilter() created = django_filters.DateTimeFilter()
object_type_id = MultiValueNumberFilter() object_type_id = MultiValueNumberFilter()
@ -401,6 +412,7 @@ class BookmarkFilterSet(BaseFilterSet):
fields = ('id', 'object_id') fields = ('id', 'object_id')
@register_filterset
class NotificationGroupFilterSet(ChangeLoggedModelFilterSet): class NotificationGroupFilterSet(ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -444,6 +456,7 @@ class NotificationGroupFilterSet(ChangeLoggedModelFilterSet):
) )
@register_filterset
class ImageAttachmentFilterSet(ChangeLoggedModelFilterSet): class ImageAttachmentFilterSet(ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -465,6 +478,7 @@ class ImageAttachmentFilterSet(ChangeLoggedModelFilterSet):
) )
@register_filterset
class JournalEntryFilterSet(NetBoxModelFilterSet): class JournalEntryFilterSet(NetBoxModelFilterSet):
created = django_filters.DateTimeFromToRangeFilter() created = django_filters.DateTimeFromToRangeFilter()
assigned_object_type = ContentTypeFilter() assigned_object_type = ContentTypeFilter()
@ -495,6 +509,7 @@ class JournalEntryFilterSet(NetBoxModelFilterSet):
return queryset.filter(comments__icontains=value) return queryset.filter(comments__icontains=value)
@register_filterset
class TagFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet): class TagFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -555,6 +570,7 @@ class TagFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
) )
@register_filterset
class TaggedItemFilterSet(BaseFilterSet): class TaggedItemFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -590,6 +606,7 @@ class TaggedItemFilterSet(BaseFilterSet):
) )
@register_filterset
class ConfigContextProfileFilterSet(PrimaryModelFilterSet): class ConfigContextProfileFilterSet(PrimaryModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -620,6 +637,7 @@ class ConfigContextProfileFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class ConfigContextFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet): class ConfigContextFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -789,6 +807,7 @@ class ConfigContextFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
) )
@register_filterset
class ConfigTemplateFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet): class ConfigTemplateFilterSet(OwnerFilterMixin, ChangeLoggedModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',

View File

@ -10,7 +10,7 @@ from netbox.forms import NetBoxModelFilterSetForm, PrimaryModelFilterSetForm
from netbox.forms.mixins import SavedFiltersMixin from netbox.forms.mixins import SavedFiltersMixin
from tenancy.models import Tenant, TenantGroup from tenancy.models import Tenant, TenantGroup
from users.models import Group, Owner, User from users.models import Group, Owner, User
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice
from utilities.forms.fields import ( from utilities.forms.fields import (
ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField,
TagFilterField, TagFilterField,
@ -40,7 +40,6 @@ __all__ = (
) )
@register_filterset(CustomFieldFilterSet)
class CustomFieldFilterForm(SavedFiltersMixin, FilterForm): class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
model = CustomField model = CustomField
fieldsets = ( fieldsets = (
@ -128,7 +127,6 @@ class CustomFieldFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(CustomFieldChoiceSetFilterSet)
class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm): class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm):
model = CustomFieldChoiceSet model = CustomFieldChoiceSet
fieldsets = ( fieldsets = (
@ -149,7 +147,6 @@ class CustomFieldChoiceSetFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(CustomLinkFilterSet)
class CustomLinkFilterForm(SavedFiltersMixin, FilterForm): class CustomLinkFilterForm(SavedFiltersMixin, FilterForm):
model = CustomLink model = CustomLink
fieldsets = ( fieldsets = (
@ -186,7 +183,6 @@ class CustomLinkFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(ExportTemplateFilterSet)
class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm): class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm):
model = ExportTemplate model = ExportTemplate
fieldsets = ( fieldsets = (
@ -238,7 +234,6 @@ class ExportTemplateFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(ImageAttachmentFilterSet)
class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm): class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
model = ImageAttachment model = ImageAttachment
fieldsets = ( fieldsets = (
@ -256,7 +251,6 @@ class ImageAttachmentFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(SavedFilterFilterSet)
class SavedFilterFilterForm(SavedFiltersMixin, FilterForm): class SavedFilterFilterForm(SavedFiltersMixin, FilterForm):
model = SavedFilter model = SavedFilter
fieldsets = ( fieldsets = (
@ -293,7 +287,6 @@ class SavedFilterFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(TableConfigFilterSet)
class TableConfigFilterForm(SavedFiltersMixin, FilterForm): class TableConfigFilterForm(SavedFiltersMixin, FilterForm):
model = TableConfig model = TableConfig
fieldsets = ( fieldsets = (
@ -325,7 +318,6 @@ class TableConfigFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(WebhookFilterSet)
class WebhookFilterForm(NetBoxModelFilterSetForm): class WebhookFilterForm(NetBoxModelFilterSetForm):
model = Webhook model = Webhook
fieldsets = ( fieldsets = (
@ -353,7 +345,6 @@ class WebhookFilterForm(NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(EventRuleFilterSet)
class EventRuleFilterForm(NetBoxModelFilterSetForm): class EventRuleFilterForm(NetBoxModelFilterSetForm):
model = EventRule model = EventRule
fieldsets = ( fieldsets = (
@ -390,7 +381,6 @@ class EventRuleFilterForm(NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(TagFilterSet)
class TagFilterForm(SavedFiltersMixin, FilterForm): class TagFilterForm(SavedFiltersMixin, FilterForm):
model = Tag model = Tag
content_type_id = ContentTypeMultipleChoiceField( content_type_id = ContentTypeMultipleChoiceField(
@ -410,7 +400,6 @@ class TagFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(ConfigContextProfileFilterSet)
class ConfigContextProfileFilterForm(PrimaryModelFilterSetForm): class ConfigContextProfileFilterForm(PrimaryModelFilterSetForm):
model = ConfigContextProfile model = ConfigContextProfile
fieldsets = ( fieldsets = (
@ -432,7 +421,6 @@ class ConfigContextProfileFilterForm(PrimaryModelFilterSetForm):
) )
@register_filterset(ConfigContextFilterSet)
class ConfigContextFilterForm(SavedFiltersMixin, FilterForm): class ConfigContextFilterForm(SavedFiltersMixin, FilterForm):
model = ConfigContext model = ConfigContext
fieldsets = ( fieldsets = (
@ -534,7 +522,6 @@ class ConfigContextFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(ConfigTemplateFilterSet)
class ConfigTemplateFilterForm(SavedFiltersMixin, FilterForm): class ConfigTemplateFilterForm(SavedFiltersMixin, FilterForm):
model = ConfigTemplate model = ConfigTemplate
fieldsets = ( fieldsets = (
@ -599,7 +586,6 @@ class LocalConfigContextFilterForm(forms.Form):
) )
@register_filterset(JournalEntryFilterSet)
class JournalEntryFilterForm(NetBoxModelFilterSetForm): class JournalEntryFilterForm(NetBoxModelFilterSetForm):
model = JournalEntry model = JournalEntry
fieldsets = ( fieldsets = (
@ -635,7 +621,6 @@ class JournalEntryFilterForm(NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(NotificationGroupFilterSet)
class NotificationGroupFilterForm(SavedFiltersMixin, FilterForm): class NotificationGroupFilterForm(SavedFiltersMixin, FilterForm):
model = NotificationGroup model = NotificationGroup
user_id = DynamicModelMultipleChoiceField( user_id = DynamicModelMultipleChoiceField(

View File

@ -19,6 +19,7 @@ from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet
from utilities.filters import ( from utilities.filters import (
ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, NumericArrayFilter, TreeNodeMultipleChoiceFilter, ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, NumericArrayFilter, TreeNodeMultipleChoiceFilter,
) )
from utilities.filtersets import register_filterset
from virtualization.models import VirtualMachine, VMInterface from virtualization.models import VirtualMachine, VMInterface
from vpn.models import L2VPN from vpn.models import L2VPN
from .choices import * from .choices import *
@ -47,6 +48,7 @@ __all__ = (
) )
@register_filterset
class VRFFilterSet(PrimaryModelFilterSet, TenancyFilterSet): class VRFFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
import_target_id = django_filters.ModelMultipleChoiceFilter( import_target_id = django_filters.ModelMultipleChoiceFilter(
field_name='import_targets', field_name='import_targets',
@ -85,6 +87,7 @@ class VRFFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
fields = ('id', 'name', 'rd', 'enforce_unique', 'description') fields = ('id', 'name', 'rd', 'enforce_unique', 'description')
@register_filterset
class RouteTargetFilterSet(PrimaryModelFilterSet, TenancyFilterSet): class RouteTargetFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
importing_vrf_id = django_filters.ModelMultipleChoiceFilter( importing_vrf_id = django_filters.ModelMultipleChoiceFilter(
field_name='importing_vrfs', field_name='importing_vrfs',
@ -144,6 +147,7 @@ class RouteTargetFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
fields = ('id', 'name', 'description') fields = ('id', 'name', 'description')
@register_filterset
class RIRFilterSet(OrganizationalModelFilterSet): class RIRFilterSet(OrganizationalModelFilterSet):
class Meta: class Meta:
@ -151,6 +155,7 @@ class RIRFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'is_private', 'description') fields = ('id', 'name', 'slug', 'is_private', 'description')
@register_filterset
class AggregateFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class AggregateFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
family = django_filters.NumberFilter( family = django_filters.NumberFilter(
field_name='prefix', field_name='prefix',
@ -198,6 +203,7 @@ class AggregateFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFi
return queryset.none() return queryset.none()
@register_filterset
class ASNRangeFilterSet(OrganizationalModelFilterSet, TenancyFilterSet): class ASNRangeFilterSet(OrganizationalModelFilterSet, TenancyFilterSet):
rir_id = django_filters.ModelMultipleChoiceFilter( rir_id = django_filters.ModelMultipleChoiceFilter(
queryset=RIR.objects.all(), queryset=RIR.objects.all(),
@ -223,6 +229,7 @@ class ASNRangeFilterSet(OrganizationalModelFilterSet, TenancyFilterSet):
) )
@register_filterset
class ASNFilterSet(PrimaryModelFilterSet, TenancyFilterSet): class ASNFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
rir_id = django_filters.ModelMultipleChoiceFilter( rir_id = django_filters.ModelMultipleChoiceFilter(
queryset=RIR.objects.all(), queryset=RIR.objects.all(),
@ -285,6 +292,7 @@ class ASNFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class RoleFilterSet(OrganizationalModelFilterSet): class RoleFilterSet(OrganizationalModelFilterSet):
class Meta: class Meta:
@ -292,6 +300,7 @@ class RoleFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'description', 'weight') fields = ('id', 'name', 'slug', 'description', 'weight')
@register_filterset
class PrefixFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet, ContactModelFilterSet): class PrefixFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet, ContactModelFilterSet):
family = django_filters.NumberFilter( family = django_filters.NumberFilter(
field_name='prefix', field_name='prefix',
@ -458,6 +467,7 @@ class PrefixFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet,
).distinct() ).distinct()
@register_filterset
class IPRangeFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class IPRangeFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
family = django_filters.NumberFilter( family = django_filters.NumberFilter(
field_name='start_address', field_name='start_address',
@ -550,6 +560,7 @@ class IPRangeFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilt
return queryset.filter(q) return queryset.filter(q)
@register_filterset
class IPAddressFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class IPAddressFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
family = django_filters.NumberFilter( family = django_filters.NumberFilter(
field_name='address', field_name='address',
@ -786,6 +797,7 @@ class IPAddressFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFi
) )
@register_filterset
class FHRPGroupFilterSet(PrimaryModelFilterSet): class FHRPGroupFilterSet(PrimaryModelFilterSet):
protocol = django_filters.MultipleChoiceFilter( protocol = django_filters.MultipleChoiceFilter(
choices=FHRPGroupProtocolChoices choices=FHRPGroupProtocolChoices
@ -833,6 +845,7 @@ class FHRPGroupFilterSet(PrimaryModelFilterSet):
return queryset.filter(ip_filter) return queryset.filter(ip_filter)
@register_filterset
class FHRPGroupAssignmentFilterSet(ChangeLoggedModelFilterSet): class FHRPGroupAssignmentFilterSet(ChangeLoggedModelFilterSet):
interface_type = ContentTypeFilter() interface_type = ContentTypeFilter()
group_id = django_filters.ModelMultipleChoiceFilter( group_id = django_filters.ModelMultipleChoiceFilter(
@ -887,6 +900,7 @@ class FHRPGroupAssignmentFilterSet(ChangeLoggedModelFilterSet):
) )
@register_filterset
class VLANGroupFilterSet(OrganizationalModelFilterSet, TenancyFilterSet): class VLANGroupFilterSet(OrganizationalModelFilterSet, TenancyFilterSet):
scope_type = ContentTypeFilter() scope_type = ContentTypeFilter()
region = django_filters.NumberFilter( region = django_filters.NumberFilter(
@ -936,6 +950,7 @@ class VLANGroupFilterSet(OrganizationalModelFilterSet, TenancyFilterSet):
) )
@register_filterset
class VLANFilterSet(PrimaryModelFilterSet, TenancyFilterSet): class VLANFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
region_id = TreeNodeMultipleChoiceFilter( region_id = TreeNodeMultipleChoiceFilter(
queryset=Region.objects.all(), queryset=Region.objects.all(),
@ -1087,6 +1102,7 @@ class VLANFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
).distinct() ).distinct()
@register_filterset
class VLANTranslationPolicyFilterSet(PrimaryModelFilterSet): class VLANTranslationPolicyFilterSet(PrimaryModelFilterSet):
class Meta: class Meta:
@ -1103,6 +1119,7 @@ class VLANTranslationPolicyFilterSet(PrimaryModelFilterSet):
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class VLANTranslationRuleFilterSet(NetBoxModelFilterSet): class VLANTranslationRuleFilterSet(NetBoxModelFilterSet):
policy_id = django_filters.ModelMultipleChoiceFilter( policy_id = django_filters.ModelMultipleChoiceFilter(
queryset=VLANTranslationPolicy.objects.all(), queryset=VLANTranslationPolicy.objects.all(),
@ -1134,6 +1151,7 @@ class VLANTranslationRuleFilterSet(NetBoxModelFilterSet):
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class ServiceTemplateFilterSet(PrimaryModelFilterSet): class ServiceTemplateFilterSet(PrimaryModelFilterSet):
port = NumericArrayFilter( port = NumericArrayFilter(
field_name='ports', field_name='ports',
@ -1154,6 +1172,7 @@ class ServiceTemplateFilterSet(PrimaryModelFilterSet):
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class ServiceFilterSet(ContactModelFilterSet, PrimaryModelFilterSet): class ServiceFilterSet(ContactModelFilterSet, PrimaryModelFilterSet):
parent_object_type = ContentTypeFilter() parent_object_type = ContentTypeFilter()
device = MultiValueCharFilter( device = MultiValueCharFilter(

View File

@ -8,7 +8,7 @@ from ipam.filtersets import *
from ipam.models import * from ipam.models import *
from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice, register_filterset from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from virtualization.models import VirtualMachine, ClusterGroup, Cluster from virtualization.models import VirtualMachine, ClusterGroup, Cluster
@ -43,7 +43,6 @@ IPADDRESS_MASK_LENGTH_CHOICES = add_blank_choice([
]) ])
@register_filterset(VRFFilterSet)
class VRFFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class VRFFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = VRF model = VRF
fieldsets = ( fieldsets = (
@ -64,7 +63,6 @@ class VRFFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RouteTargetFilterSet)
class RouteTargetFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class RouteTargetFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = RouteTarget model = RouteTarget
fieldsets = ( fieldsets = (
@ -85,7 +83,6 @@ class RouteTargetFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RIRFilterSet)
class RIRFilterForm(OrganizationalModelFilterSetForm): class RIRFilterForm(OrganizationalModelFilterSetForm):
model = RIR model = RIR
fieldsets = ( fieldsets = (
@ -102,7 +99,6 @@ class RIRFilterForm(OrganizationalModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(AggregateFilterSet)
class AggregateFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class AggregateFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Aggregate model = Aggregate
fieldsets = ( fieldsets = (
@ -124,7 +120,6 @@ class AggregateFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryMode
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ASNRangeFilterSet)
class ASNRangeFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm): class ASNRangeFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm):
model = ASNRange model = ASNRange
fieldsets = ( fieldsets = (
@ -148,7 +143,6 @@ class ASNRangeFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ASNFilterSet)
class ASNFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class ASNFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = ASN model = ASN
fieldsets = ( fieldsets = (
@ -174,7 +168,6 @@ class ASNFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(RoleFilterSet)
class RoleFilterForm(OrganizationalModelFilterSetForm): class RoleFilterForm(OrganizationalModelFilterSetForm):
model = Role model = Role
fieldsets = ( fieldsets = (
@ -183,7 +176,6 @@ class RoleFilterForm(OrganizationalModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(PrefixFilterSet)
class PrefixFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class PrefixFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Prefix model = Prefix
fieldsets = ( fieldsets = (
@ -290,7 +282,6 @@ class PrefixFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFi
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPRangeFilterSet)
class IPRangeFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class IPRangeFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = IPRange model = IPRange
fieldsets = ( fieldsets = (
@ -338,7 +329,6 @@ class IPRangeFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelF
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPAddressFilterSet)
class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = IPAddress model = IPAddress
fieldsets = ( fieldsets = (
@ -417,7 +407,6 @@ class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryMode
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(FHRPGroupFilterSet)
class FHRPGroupFilterForm(PrimaryModelFilterSetForm): class FHRPGroupFilterForm(PrimaryModelFilterSetForm):
model = FHRPGroup model = FHRPGroup
fieldsets = ( fieldsets = (
@ -451,7 +440,6 @@ class FHRPGroupFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VLANGroupFilterSet)
class VLANGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm): class VLANGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm):
fieldsets = ( fieldsets = (
FieldSet('q', 'filter_id', 'tag', 'owner_id'), FieldSet('q', 'filter_id', 'tag', 'owner_id'),
@ -505,7 +493,6 @@ class VLANGroupFilterForm(TenancyFilterForm, OrganizationalModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VLANTranslationPolicyFilterSet)
class VLANTranslationPolicyFilterForm(PrimaryModelFilterSetForm): class VLANTranslationPolicyFilterForm(PrimaryModelFilterSetForm):
model = VLANTranslationPolicy model = VLANTranslationPolicy
fieldsets = ( fieldsets = (
@ -519,7 +506,6 @@ class VLANTranslationPolicyFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VLANTranslationRuleFilterSet)
class VLANTranslationRuleFilterForm(NetBoxModelFilterSetForm): class VLANTranslationRuleFilterForm(NetBoxModelFilterSetForm):
model = VLANTranslationRule model = VLANTranslationRule
fieldsets = ( fieldsets = (
@ -544,7 +530,6 @@ class VLANTranslationRuleFilterForm(NetBoxModelFilterSetForm):
) )
@register_filterset(VLANFilterSet)
class VLANFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class VLANFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = VLAN model = VLAN
fieldsets = ( fieldsets = (
@ -617,7 +602,6 @@ class VLANFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ServiceTemplateFilterSet)
class ServiceTemplateFilterForm(PrimaryModelFilterSetForm): class ServiceTemplateFilterForm(PrimaryModelFilterSetForm):
model = ServiceTemplate model = ServiceTemplate
fieldsets = ( fieldsets = (
@ -636,7 +620,6 @@ class ServiceTemplateFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ServiceFilterSet)
class ServiceFilterForm(ContactModelFilterForm, ServiceTemplateFilterForm): class ServiceFilterForm(ContactModelFilterForm, ServiceTemplateFilterForm):
model = Service model = Service
fieldsets = ( fieldsets = (

View File

@ -6,6 +6,7 @@ from netbox.filtersets import (
NestedGroupModelFilterSet, NetBoxModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet, NestedGroupModelFilterSet, NetBoxModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet,
) )
from utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter from utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter
from utilities.filtersets import register_filterset
from .models import * from .models import *
__all__ = ( __all__ = (
@ -24,6 +25,7 @@ __all__ = (
# Contacts # Contacts
# #
@register_filterset
class ContactGroupFilterSet(NestedGroupModelFilterSet): class ContactGroupFilterSet(NestedGroupModelFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=ContactGroup.objects.all(), queryset=ContactGroup.objects.all(),
@ -59,6 +61,7 @@ class ContactGroupFilterSet(NestedGroupModelFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class ContactRoleFilterSet(OrganizationalModelFilterSet): class ContactRoleFilterSet(OrganizationalModelFilterSet):
class Meta: class Meta:
@ -66,6 +69,7 @@ class ContactRoleFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class ContactFilterSet(PrimaryModelFilterSet): class ContactFilterSet(PrimaryModelFilterSet):
group_id = TreeNodeMultipleChoiceFilter( group_id = TreeNodeMultipleChoiceFilter(
queryset=ContactGroup.objects.all(), queryset=ContactGroup.objects.all(),
@ -100,6 +104,7 @@ class ContactFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class ContactAssignmentFilterSet(NetBoxModelFilterSet): class ContactAssignmentFilterSet(NetBoxModelFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -170,6 +175,7 @@ class ContactModelFilterSet(django_filters.FilterSet):
# Tenancy # Tenancy
# #
@register_filterset
class TenantGroupFilterSet(NestedGroupModelFilterSet): class TenantGroupFilterSet(NestedGroupModelFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=TenantGroup.objects.all(), queryset=TenantGroup.objects.all(),
@ -200,6 +206,7 @@ class TenantGroupFilterSet(NestedGroupModelFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class TenantFilterSet(PrimaryModelFilterSet, ContactModelFilterSet): class TenantFilterSet(PrimaryModelFilterSet, ContactModelFilterSet):
group_id = TreeNodeMultipleChoiceFilter( group_id = TreeNodeMultipleChoiceFilter(
queryset=TenantGroup.objects.all(), queryset=TenantGroup.objects.all(),

View File

@ -13,7 +13,6 @@ from tenancy.forms import ContactModelFilterForm
from utilities.forms.fields import ( from utilities.forms.fields import (
ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
) )
from utilities.forms import register_filterset
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
__all__ = ( __all__ = (
@ -30,7 +29,6 @@ __all__ = (
# Tenants # Tenants
# #
@register_filterset(TenantGroupFilterSet)
class TenantGroupFilterForm(NestedGroupModelFilterSetForm): class TenantGroupFilterForm(NestedGroupModelFilterSetForm):
model = TenantGroup model = TenantGroup
fieldsets = ( fieldsets = (
@ -45,7 +43,6 @@ class TenantGroupFilterForm(NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(TenantFilterSet)
class TenantFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm): class TenantFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Tenant model = Tenant
fieldsets = ( fieldsets = (
@ -66,7 +63,6 @@ class TenantFilterForm(ContactModelFilterForm, PrimaryModelFilterSetForm):
# Contacts # Contacts
# #
@register_filterset(ContactGroupFilterSet)
class ContactGroupFilterForm(NestedGroupModelFilterSetForm): class ContactGroupFilterForm(NestedGroupModelFilterSetForm):
model = ContactGroup model = ContactGroup
fieldsets = ( fieldsets = (
@ -81,7 +77,6 @@ class ContactGroupFilterForm(NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ContactRoleFilterSet)
class ContactRoleFilterForm(OrganizationalModelFilterSetForm): class ContactRoleFilterForm(OrganizationalModelFilterSetForm):
model = ContactRole model = ContactRole
fieldsets = ( fieldsets = (
@ -90,7 +85,6 @@ class ContactRoleFilterForm(OrganizationalModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ContactFilterSet)
class ContactFilterForm(PrimaryModelFilterSetForm): class ContactFilterForm(PrimaryModelFilterSetForm):
model = Contact model = Contact
fieldsets = ( fieldsets = (
@ -106,7 +100,6 @@ class ContactFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ContactAssignmentFilterSet)
class ContactAssignmentFilterForm(NetBoxModelFilterSetForm): class ContactAssignmentFilterForm(NetBoxModelFilterSetForm):
model = ContactAssignment model = ContactAssignment
fieldsets = ( fieldsets = (

View File

@ -8,6 +8,7 @@ from extras.models import NotificationGroup
from netbox.filtersets import BaseFilterSet from netbox.filtersets import BaseFilterSet
from users.models import Group, ObjectPermission, Owner, OwnerGroup, Token, User from users.models import Group, ObjectPermission, Owner, OwnerGroup, Token, User
from utilities.filters import ContentTypeFilter from utilities.filters import ContentTypeFilter
from utilities.filtersets import register_filterset
__all__ = ( __all__ = (
'GroupFilterSet', 'GroupFilterSet',
@ -19,6 +20,7 @@ __all__ = (
) )
@register_filterset
class GroupFilterSet(BaseFilterSet): class GroupFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -64,6 +66,7 @@ class GroupFilterSet(BaseFilterSet):
) )
@register_filterset
class UserFilterSet(BaseFilterSet): class UserFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -120,6 +123,7 @@ class UserFilterSet(BaseFilterSet):
) )
@register_filterset
class TokenFilterSet(BaseFilterSet): class TokenFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -181,6 +185,7 @@ class TokenFilterSet(BaseFilterSet):
) )
@register_filterset
class ObjectPermissionFilterSet(BaseFilterSet): class ObjectPermissionFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -248,6 +253,7 @@ class ObjectPermissionFilterSet(BaseFilterSet):
return queryset.exclude(actions__contains=[action]) return queryset.exclude(actions__contains=[action])
@register_filterset
class OwnerGroupFilterSet(BaseFilterSet): class OwnerGroupFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',
@ -267,6 +273,7 @@ class OwnerGroupFilterSet(BaseFilterSet):
) )
@register_filterset
class OwnerFilterSet(BaseFilterSet): class OwnerFilterSet(BaseFilterSet):
q = django_filters.CharFilter( q = django_filters.CharFilter(
method='search', method='search',

View File

@ -5,7 +5,7 @@ from netbox.forms import NetBoxModelFilterSetForm
from netbox.forms.mixins import SavedFiltersMixin from netbox.forms.mixins import SavedFiltersMixin
from users.choices import TokenVersionChoices from users.choices import TokenVersionChoices
from users.models import Group, ObjectPermission, Owner, OwnerGroup, Token, User from users.models import Group, ObjectPermission, Owner, OwnerGroup, Token, User
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, register_filterset from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm
from utilities.forms.fields import DynamicModelMultipleChoiceField from utilities.forms.fields import DynamicModelMultipleChoiceField
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.utils import add_blank_choice from utilities.forms.utils import add_blank_choice
@ -22,7 +22,6 @@ __all__ = (
) )
@register_filterset(GroupFilterSet)
class GroupFilterForm(NetBoxModelFilterSetForm): class GroupFilterForm(NetBoxModelFilterSetForm):
model = Group model = Group
fieldsets = ( fieldsets = (
@ -30,7 +29,6 @@ class GroupFilterForm(NetBoxModelFilterSetForm):
) )
@register_filterset(UserFilterSet)
class UserFilterForm(NetBoxModelFilterSetForm): class UserFilterForm(NetBoxModelFilterSetForm):
model = User model = User
fieldsets = ( fieldsets = (
@ -59,7 +57,6 @@ class UserFilterForm(NetBoxModelFilterSetForm):
) )
@register_filterset(ObjectPermissionFilterSet)
class ObjectPermissionFilterForm(NetBoxModelFilterSetForm): class ObjectPermissionFilterForm(NetBoxModelFilterSetForm):
model = ObjectPermission model = ObjectPermission
fieldsets = ( fieldsets = (
@ -114,7 +111,6 @@ class ObjectPermissionFilterForm(NetBoxModelFilterSetForm):
) )
@register_filterset(TokenFilterSet)
class TokenFilterForm(SavedFiltersMixin, FilterForm): class TokenFilterForm(SavedFiltersMixin, FilterForm):
model = Token model = Token
fieldsets = ( fieldsets = (
@ -156,7 +152,6 @@ class TokenFilterForm(SavedFiltersMixin, FilterForm):
) )
@register_filterset(OwnerGroupFilterSet)
class OwnerGroupFilterForm(NetBoxModelFilterSetForm): class OwnerGroupFilterForm(NetBoxModelFilterSetForm):
model = OwnerGroup model = OwnerGroup
fieldsets = ( fieldsets = (
@ -164,7 +159,6 @@ class OwnerGroupFilterForm(NetBoxModelFilterSetForm):
) )
@register_filterset(OwnerFilterSet)
class OwnerFilterForm(NetBoxModelFilterSetForm): class OwnerFilterForm(NetBoxModelFilterSetForm):
model = Owner model = Owner
fieldsets = ( fieldsets = (

View File

@ -0,0 +1,13 @@
from netbox.registry import registry
def register_filterset(filterset_class):
"""
Decorator for registering a FilterSet with the application registry.
Uses model identifier as key to match search index pattern.
"""
model = filterset_class._meta.model
label = f'{model._meta.app_label}.{model._meta.model_name}'
registry['filtersets'][label] = filterset_class
return filterset_class

View File

@ -2,18 +2,3 @@ from .constants import *
from .forms import * from .forms import *
from .mixins import * from .mixins import *
from .utils import * from .utils import *
def register_filterset(filterset_class):
"""
Decorator for registering a FilterSet with the application registry.
Uses model identifier as key to match search index pattern.
"""
def decorator(form_class):
from netbox.registry import registry
model = filterset_class._meta.model
key = f'{model._meta.app_label}.{model._meta.model_name}'
registry['filtersets'][key] = filterset_class
return form_class
return decorator

View File

@ -5,7 +5,9 @@ from django import forms
from django.core.validators import MaxValueValidator, MinValueValidator from django.core.validators import MaxValueValidator, MinValueValidator
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from netbox.registry import registry
from utilities.forms.fields import ColorField, QueryField, TagFilterField from utilities.forms.fields import ColorField, QueryField, TagFilterField
from utilities.forms.widgets import FilterModifierWidget
from utilities.forms.widgets.apiselect import APISelect from utilities.forms.widgets.apiselect import APISelect
from utilities.forms.widgets.modifiers import MODIFIER_EMPTY_FALSE, MODIFIER_EMPTY_TRUE from utilities.forms.widgets.modifiers import MODIFIER_EMPTY_FALSE, MODIFIER_EMPTY_TRUE
@ -174,8 +176,6 @@ class FilterModifierMixin:
def _enhance_fields_with_modifiers(self): def _enhance_fields_with_modifiers(self):
"""Wrap compatible field widgets with FilterModifierWidget.""" """Wrap compatible field widgets with FilterModifierWidget."""
from utilities.forms.widgets import FilterModifierWidget
from netbox.registry import registry
model = getattr(self, 'model', None) model = getattr(self, 'model', None)
if model is None and hasattr(self, '_meta'): if model is None and hasattr(self, '_meta'):
@ -237,7 +237,7 @@ class FilterModifierMixin:
def _is_api_widget_field(self, field): def _is_api_widget_field(self, field):
"""Check if a field uses an API-based widget.""" """Check if a field uses an API-based widget."""
if field.widget is APISelect: if isinstance(field.widget, APISelect):
return True return True
if hasattr(field.widget, 'attrs') and field.widget.attrs: if hasattr(field.widget, 'attrs') and field.widget.attrs:

View File

@ -14,6 +14,7 @@ from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet
from users.filterset_mixins import OwnerFilterMixin from users.filterset_mixins import OwnerFilterMixin
from utilities.filters import MultiValueCharFilter, MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter from utilities.filters import MultiValueCharFilter, MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter
from utilities.filtersets import register_filterset
from .choices import * from .choices import *
from .models import * from .models import *
@ -27,6 +28,7 @@ __all__ = (
) )
@register_filterset
class ClusterTypeFilterSet(OrganizationalModelFilterSet): class ClusterTypeFilterSet(OrganizationalModelFilterSet):
class Meta: class Meta:
@ -34,6 +36,7 @@ class ClusterTypeFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class ClusterGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet): class ClusterGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
class Meta: class Meta:
@ -41,6 +44,7 @@ class ClusterGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet)
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class ClusterFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ScopedFilterSet, ContactModelFilterSet): class ClusterFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ScopedFilterSet, ContactModelFilterSet):
group_id = django_filters.ModelMultipleChoiceFilter( group_id = django_filters.ModelMultipleChoiceFilter(
queryset=ClusterGroup.objects.all(), queryset=ClusterGroup.objects.all(),
@ -81,6 +85,7 @@ class ClusterFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ScopedFilterSet,
) )
@register_filterset
class VirtualMachineFilterSet( class VirtualMachineFilterSet(
PrimaryModelFilterSet, PrimaryModelFilterSet,
TenancyFilterSet, TenancyFilterSet,
@ -241,6 +246,7 @@ class VirtualMachineFilterSet(
return queryset.exclude(params) return queryset.exclude(params)
@register_filterset
class VMInterfaceFilterSet(CommonInterfaceFilterSet, OwnerFilterMixin, NetBoxModelFilterSet): class VMInterfaceFilterSet(CommonInterfaceFilterSet, OwnerFilterMixin, NetBoxModelFilterSet):
cluster_id = django_filters.ModelMultipleChoiceFilter( cluster_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__cluster', field_name='virtual_machine__cluster',
@ -303,6 +309,7 @@ class VMInterfaceFilterSet(CommonInterfaceFilterSet, OwnerFilterMixin, NetBoxMod
) )
@register_filterset
class VirtualDiskFilterSet(OwnerFilterMixin, NetBoxModelFilterSet): class VirtualDiskFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
virtual_machine_id = django_filters.ModelMultipleChoiceFilter( virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine', field_name='virtual_machine',

View File

@ -9,7 +9,7 @@ from ipam.models import VRF, VLANTranslationPolicy
from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms import NetBoxModelFilterSetForm, OrganizationalModelFilterSetForm, PrimaryModelFilterSetForm
from tenancy.forms import ContactModelFilterForm, TenancyFilterForm from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from users.models import Owner from users.models import Owner
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, register_filterset from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from virtualization.choices import * from virtualization.choices import *
@ -27,7 +27,6 @@ __all__ = (
) )
@register_filterset(ClusterTypeFilterSet)
class ClusterTypeFilterForm(OrganizationalModelFilterSetForm): class ClusterTypeFilterForm(OrganizationalModelFilterSetForm):
model = ClusterType model = ClusterType
fieldsets = ( fieldsets = (
@ -36,7 +35,6 @@ class ClusterTypeFilterForm(OrganizationalModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(ClusterGroupFilterSet)
class ClusterGroupFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm): class ClusterGroupFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = ClusterGroup model = ClusterGroup
tag = TagFilterField(model) tag = TagFilterField(model)
@ -46,7 +44,6 @@ class ClusterGroupFilterForm(ContactModelFilterForm, OrganizationalModelFilterSe
) )
@register_filterset(ClusterFilterSet)
class ClusterFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm): class ClusterFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Cluster model = Cluster
fieldsets = ( fieldsets = (
@ -101,7 +98,6 @@ class ClusterFilterForm(TenancyFilterForm, ContactModelFilterForm, PrimaryModelF
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualMachineFilterSet)
class VirtualMachineFilterForm( class VirtualMachineFilterForm(
LocalConfigContextFilterForm, LocalConfigContextFilterForm,
TenancyFilterForm, TenancyFilterForm,
@ -210,7 +206,6 @@ class VirtualMachineFilterForm(
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VMInterfaceFilterSet)
class VMInterfaceFilterForm(NetBoxModelFilterSetForm): class VMInterfaceFilterForm(NetBoxModelFilterSetForm):
model = VMInterface model = VMInterface
fieldsets = ( fieldsets = (
@ -273,7 +268,6 @@ class VMInterfaceFilterForm(NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(VirtualDiskFilterSet)
class VirtualDiskFilterForm(NetBoxModelFilterSetForm): class VirtualDiskFilterForm(NetBoxModelFilterSetForm):
model = VirtualDisk model = VirtualDisk
fieldsets = ( fieldsets = (

View File

@ -8,6 +8,7 @@ from ipam.models import IPAddress, RouteTarget, VLAN
from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet
from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet
from utilities.filters import ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter from utilities.filters import ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter
from utilities.filtersets import register_filterset
from virtualization.models import VirtualMachine, VMInterface from virtualization.models import VirtualMachine, VMInterface
from .choices import * from .choices import *
from .models import * from .models import *
@ -26,6 +27,7 @@ __all__ = (
) )
@register_filterset
class TunnelGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet): class TunnelGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
class Meta: class Meta:
@ -33,6 +35,7 @@ class TunnelGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class TunnelFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class TunnelFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(
choices=TunnelStatusChoices choices=TunnelStatusChoices
@ -75,6 +78,7 @@ class TunnelFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilte
) )
@register_filterset
class TunnelTerminationFilterSet(NetBoxModelFilterSet): class TunnelTerminationFilterSet(NetBoxModelFilterSet):
tunnel_id = django_filters.ModelMultipleChoiceFilter( tunnel_id = django_filters.ModelMultipleChoiceFilter(
field_name='tunnel', field_name='tunnel',
@ -124,6 +128,7 @@ class TunnelTerminationFilterSet(NetBoxModelFilterSet):
fields = ('id', 'termination_id') fields = ('id', 'termination_id')
@register_filterset
class IKEProposalFilterSet(PrimaryModelFilterSet): class IKEProposalFilterSet(PrimaryModelFilterSet):
ike_policy_id = django_filters.ModelMultipleChoiceFilter( ike_policy_id = django_filters.ModelMultipleChoiceFilter(
field_name='ike_policies', field_name='ike_policies',
@ -163,6 +168,7 @@ class IKEProposalFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class IKEPolicyFilterSet(PrimaryModelFilterSet): class IKEPolicyFilterSet(PrimaryModelFilterSet):
version = django_filters.MultipleChoiceFilter( version = django_filters.MultipleChoiceFilter(
choices=IKEVersionChoices choices=IKEVersionChoices
@ -194,6 +200,7 @@ class IKEPolicyFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class IPSecProposalFilterSet(PrimaryModelFilterSet): class IPSecProposalFilterSet(PrimaryModelFilterSet):
ipsec_policy_id = django_filters.ModelMultipleChoiceFilter( ipsec_policy_id = django_filters.ModelMultipleChoiceFilter(
field_name='ipsec_policies', field_name='ipsec_policies',
@ -227,6 +234,7 @@ class IPSecProposalFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class IPSecPolicyFilterSet(PrimaryModelFilterSet): class IPSecPolicyFilterSet(PrimaryModelFilterSet):
pfs_group = django_filters.MultipleChoiceFilter( pfs_group = django_filters.MultipleChoiceFilter(
choices=DHGroupChoices choices=DHGroupChoices
@ -255,6 +263,7 @@ class IPSecPolicyFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class IPSecProfileFilterSet(PrimaryModelFilterSet): class IPSecProfileFilterSet(PrimaryModelFilterSet):
mode = django_filters.MultipleChoiceFilter( mode = django_filters.MultipleChoiceFilter(
choices=IPSecModeChoices choices=IPSecModeChoices
@ -294,6 +303,7 @@ class IPSecProfileFilterSet(PrimaryModelFilterSet):
) )
@register_filterset
class L2VPNFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet): class L2VPNFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilterSet):
type = django_filters.MultipleChoiceFilter( type = django_filters.MultipleChoiceFilter(
choices=L2VPNTypeChoices, choices=L2VPNTypeChoices,
@ -340,6 +350,7 @@ class L2VPNFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ContactModelFilter
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class L2VPNTerminationFilterSet(NetBoxModelFilterSet): class L2VPNTerminationFilterSet(NetBoxModelFilterSet):
l2vpn_id = django_filters.ModelMultipleChoiceFilter( l2vpn_id = django_filters.ModelMultipleChoiceFilter(
queryset=L2VPN.objects.all(), queryset=L2VPN.objects.all(),

View File

@ -9,7 +9,6 @@ from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from utilities.forms.fields import ( from utilities.forms.fields import (
ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
) )
from utilities.forms import register_filterset
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from utilities.forms.utils import add_blank_choice from utilities.forms.utils import add_blank_choice
from virtualization.models import VirtualMachine from virtualization.models import VirtualMachine
@ -32,7 +31,6 @@ __all__ = (
) )
@register_filterset(TunnelGroupFilterSet)
class TunnelGroupFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm): class TunnelGroupFilterForm(ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = TunnelGroup model = TunnelGroup
fieldsets = ( fieldsets = (
@ -42,7 +40,6 @@ class TunnelGroupFilterForm(ContactModelFilterForm, OrganizationalModelFilterSet
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(TunnelFilterSet)
class TunnelFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class TunnelFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Tunnel model = Tunnel
fieldsets = ( fieldsets = (
@ -79,7 +76,6 @@ class TunnelFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFi
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(TunnelTerminationFilterSet)
class TunnelTerminationFilterForm(NetBoxModelFilterSetForm): class TunnelTerminationFilterForm(NetBoxModelFilterSetForm):
model = TunnelTermination model = TunnelTermination
fieldsets = ( fieldsets = (
@ -99,7 +95,6 @@ class TunnelTerminationFilterForm(NetBoxModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IKEProposalFilterSet)
class IKEProposalFilterForm(PrimaryModelFilterSetForm): class IKEProposalFilterForm(PrimaryModelFilterSetForm):
model = IKEProposal model = IKEProposal
fieldsets = ( fieldsets = (
@ -131,7 +126,6 @@ class IKEProposalFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IKEPolicyFilterSet)
class IKEPolicyFilterForm(PrimaryModelFilterSetForm): class IKEPolicyFilterForm(PrimaryModelFilterSetForm):
model = IKEPolicy model = IKEPolicy
fieldsets = ( fieldsets = (
@ -156,7 +150,6 @@ class IKEPolicyFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPSecProposalFilterSet)
class IPSecProposalFilterForm(PrimaryModelFilterSetForm): class IPSecProposalFilterForm(PrimaryModelFilterSetForm):
model = IPSecProposal model = IPSecProposal
fieldsets = ( fieldsets = (
@ -176,7 +169,6 @@ class IPSecProposalFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPSecPolicyFilterSet)
class IPSecPolicyFilterForm(PrimaryModelFilterSetForm): class IPSecPolicyFilterForm(PrimaryModelFilterSetForm):
model = IPSecPolicy model = IPSecPolicy
fieldsets = ( fieldsets = (
@ -196,7 +188,6 @@ class IPSecPolicyFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(IPSecProfileFilterSet)
class IPSecProfileFilterForm(PrimaryModelFilterSetForm): class IPSecProfileFilterForm(PrimaryModelFilterSetForm):
model = IPSecProfile model = IPSecProfile
fieldsets = ( fieldsets = (
@ -221,7 +212,6 @@ class IPSecProfileFilterForm(PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(L2VPNFilterSet)
class L2VPNFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm): class L2VPNFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = L2VPN model = L2VPN
fieldsets = ( fieldsets = (
@ -253,7 +243,6 @@ class L2VPNFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryModelFil
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(L2VPNTerminationFilterSet)
class L2VPNTerminationFilterForm(NetBoxModelFilterSetForm): class L2VPNTerminationFilterForm(NetBoxModelFilterSetForm):
model = L2VPNTermination model = L2VPNTermination
fieldsets = ( fieldsets = (

View File

@ -8,6 +8,7 @@ from ipam.models import VLAN
from netbox.filtersets import NestedGroupModelFilterSet, PrimaryModelFilterSet from netbox.filtersets import NestedGroupModelFilterSet, PrimaryModelFilterSet
from tenancy.filtersets import TenancyFilterSet from tenancy.filtersets import TenancyFilterSet
from utilities.filters import TreeNodeMultipleChoiceFilter from utilities.filters import TreeNodeMultipleChoiceFilter
from utilities.filtersets import register_filterset
from .choices import * from .choices import *
from .models import * from .models import *
@ -18,6 +19,7 @@ __all__ = (
) )
@register_filterset
class WirelessLANGroupFilterSet(NestedGroupModelFilterSet): class WirelessLANGroupFilterSet(NestedGroupModelFilterSet):
parent_id = django_filters.ModelMultipleChoiceFilter( parent_id = django_filters.ModelMultipleChoiceFilter(
queryset=WirelessLANGroup.objects.all() queryset=WirelessLANGroup.objects.all()
@ -44,6 +46,7 @@ class WirelessLANGroupFilterSet(NestedGroupModelFilterSet):
fields = ('id', 'name', 'slug', 'description') fields = ('id', 'name', 'slug', 'description')
@register_filterset
class WirelessLANFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet): class WirelessLANFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilterSet):
group_id = TreeNodeMultipleChoiceFilter( group_id = TreeNodeMultipleChoiceFilter(
queryset=WirelessLANGroup.objects.all(), queryset=WirelessLANGroup.objects.all(),
@ -87,6 +90,7 @@ class WirelessLANFilterSet(PrimaryModelFilterSet, ScopedFilterSet, TenancyFilter
return queryset.filter(qs_filter) return queryset.filter(qs_filter)
@register_filterset
class WirelessLinkFilterSet(PrimaryModelFilterSet, TenancyFilterSet): class WirelessLinkFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
interface_a_id = django_filters.ModelMultipleChoiceFilter( interface_a_id = django_filters.ModelMultipleChoiceFilter(
queryset=Interface.objects.all() queryset=Interface.objects.all()

View File

@ -6,7 +6,7 @@ from dcim.models import Location, Region, Site, SiteGroup
from netbox.choices import * from netbox.choices import *
from netbox.forms import NestedGroupModelFilterSetForm, PrimaryModelFilterSetForm from netbox.forms import NestedGroupModelFilterSetForm, PrimaryModelFilterSetForm
from tenancy.forms import TenancyFilterForm from tenancy.forms import TenancyFilterForm
from utilities.forms import add_blank_choice, register_filterset from utilities.forms import add_blank_choice
from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.rendering import FieldSet from utilities.forms.rendering import FieldSet
from wireless.choices import * from wireless.choices import *
@ -20,7 +20,6 @@ __all__ = (
) )
@register_filterset(WirelessLANGroupFilterSet)
class WirelessLANGroupFilterForm(NestedGroupModelFilterSetForm): class WirelessLANGroupFilterForm(NestedGroupModelFilterSetForm):
model = WirelessLANGroup model = WirelessLANGroup
fieldsets = ( fieldsets = (
@ -35,7 +34,6 @@ class WirelessLANGroupFilterForm(NestedGroupModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(WirelessLANFilterSet)
class WirelessLANFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class WirelessLANFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = WirelessLAN model = WirelessLAN
fieldsets = ( fieldsets = (
@ -102,7 +100,6 @@ class WirelessLANFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
tag = TagFilterField(model) tag = TagFilterField(model)
@register_filterset(WirelessLinkFilterSet)
class WirelessLinkFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm): class WirelessLinkFilterForm(TenancyFilterForm, PrimaryModelFilterSetForm):
model = WirelessLink model = WirelessLink
fieldsets = ( fieldsets = (