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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@ from netbox.forms import NetBoxModelFilterSetForm
from netbox.forms.mixins import SavedFiltersMixin
from users.choices import TokenVersionChoices
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.rendering import FieldSet
from utilities.forms.utils import add_blank_choice
@ -22,7 +22,6 @@ __all__ = (
)
@register_filterset(GroupFilterSet)
class GroupFilterForm(NetBoxModelFilterSetForm):
model = Group
fieldsets = (
@ -30,7 +29,6 @@ class GroupFilterForm(NetBoxModelFilterSetForm):
)
@register_filterset(UserFilterSet)
class UserFilterForm(NetBoxModelFilterSetForm):
model = User
fieldsets = (
@ -59,7 +57,6 @@ class UserFilterForm(NetBoxModelFilterSetForm):
)
@register_filterset(ObjectPermissionFilterSet)
class ObjectPermissionFilterForm(NetBoxModelFilterSetForm):
model = ObjectPermission
fieldsets = (
@ -114,7 +111,6 @@ class ObjectPermissionFilterForm(NetBoxModelFilterSetForm):
)
@register_filterset(TokenFilterSet)
class TokenFilterForm(SavedFiltersMixin, FilterForm):
model = Token
fieldsets = (
@ -156,7 +152,6 @@ class TokenFilterForm(SavedFiltersMixin, FilterForm):
)
@register_filterset(OwnerGroupFilterSet)
class OwnerGroupFilterForm(NetBoxModelFilterSetForm):
model = OwnerGroup
fieldsets = (
@ -164,7 +159,6 @@ class OwnerGroupFilterForm(NetBoxModelFilterSetForm):
)
@register_filterset(OwnerFilterSet)
class OwnerFilterForm(NetBoxModelFilterSetForm):
model = Owner
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 .mixins 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.utils.translation import gettext_lazy as _
from netbox.registry import registry
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.modifiers import MODIFIER_EMPTY_FALSE, MODIFIER_EMPTY_TRUE
@ -174,8 +176,6 @@ class FilterModifierMixin:
def _enhance_fields_with_modifiers(self):
"""Wrap compatible field widgets with FilterModifierWidget."""
from utilities.forms.widgets import FilterModifierWidget
from netbox.registry import registry
model = getattr(self, 'model', None)
if model is None and hasattr(self, '_meta'):
@ -237,7 +237,7 @@ class FilterModifierMixin:
def _is_api_widget_field(self, field):
"""Check if a field uses an API-based widget."""
if field.widget is APISelect:
if isinstance(field.widget, APISelect):
return True
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 utilities.filters import MultiValueCharFilter, MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter
from utilities.filtersets import register_filterset
from .choices import *
from .models import *
@ -27,6 +28,7 @@ __all__ = (
)
@register_filterset
class ClusterTypeFilterSet(OrganizationalModelFilterSet):
class Meta:
@ -34,6 +36,7 @@ class ClusterTypeFilterSet(OrganizationalModelFilterSet):
fields = ('id', 'name', 'slug', 'description')
@register_filterset
class ClusterGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet):
class Meta:
@ -41,6 +44,7 @@ class ClusterGroupFilterSet(OrganizationalModelFilterSet, ContactModelFilterSet)
fields = ('id', 'name', 'slug', 'description')
@register_filterset
class ClusterFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ScopedFilterSet, ContactModelFilterSet):
group_id = django_filters.ModelMultipleChoiceFilter(
queryset=ClusterGroup.objects.all(),
@ -81,6 +85,7 @@ class ClusterFilterSet(PrimaryModelFilterSet, TenancyFilterSet, ScopedFilterSet,
)
@register_filterset
class VirtualMachineFilterSet(
PrimaryModelFilterSet,
TenancyFilterSet,
@ -241,6 +246,7 @@ class VirtualMachineFilterSet(
return queryset.exclude(params)
@register_filterset
class VMInterfaceFilterSet(CommonInterfaceFilterSet, OwnerFilterMixin, NetBoxModelFilterSet):
cluster_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine__cluster',
@ -303,6 +309,7 @@ class VMInterfaceFilterSet(CommonInterfaceFilterSet, OwnerFilterMixin, NetBoxMod
)
@register_filterset
class VirtualDiskFilterSet(OwnerFilterMixin, NetBoxModelFilterSet):
virtual_machine_id = django_filters.ModelMultipleChoiceFilter(
field_name='virtual_machine',

View File

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

View File

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

View File

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

View File

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

View File

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