Address PR feedback: Replace global filterset mappings with registry

This commit is contained in:
Jason Novinger 2025-11-20 04:59:25 -06:00
parent 4ca4983204
commit b410b4e107
14 changed files with 144 additions and 173 deletions

View File

@ -11,9 +11,8 @@ 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
from utilities.forms import add_blank_choice, register_filterset
from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import DatePicker, NumberWithOptions
@ -34,6 +33,7 @@ __all__ = (
)
@register_filterset(ProviderFilterSet)
class ProviderFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Provider
fieldsets = (
@ -69,6 +69,7 @@ class ProviderFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryMod
tag = TagFilterField(model)
@register_filterset(ProviderAccountFilterSet)
class ProviderAccountFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = ProviderAccount
fieldsets = (
@ -88,6 +89,7 @@ class ProviderAccountFilterForm(FilterModifierMixin, ContactModelFilterForm, Pri
tag = TagFilterField(model)
@register_filterset(ProviderNetworkFilterSet)
class ProviderNetworkFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ProviderNetwork
fieldsets = (
@ -107,6 +109,7 @@ class ProviderNetworkFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(CircuitTypeFilterSet)
class CircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = CircuitType
fieldsets = (
@ -121,6 +124,7 @@ class CircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetFor
)
@register_filterset(CircuitFilterSet)
class CircuitFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Circuit
fieldsets = (
@ -220,6 +224,7 @@ class CircuitFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilt
tag = TagFilterField(model)
@register_filterset(CircuitTerminationFilterSet)
class CircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = CircuitTermination
fieldsets = (
@ -274,6 +279,7 @@ class CircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm
tag = TagFilterField(model)
@register_filterset(CircuitGroupFilterSet)
class CircuitGroupFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm):
model = CircuitGroup
fieldsets = (
@ -283,6 +289,7 @@ class CircuitGroupFilterForm(FilterModifierMixin, TenancyFilterForm, Organizatio
tag = TagFilterField(model)
@register_filterset(CircuitGroupAssignmentFilterSet)
class CircuitGroupAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = CircuitGroupAssignment
fieldsets = (
@ -312,6 +319,7 @@ class CircuitGroupAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSet
tag = TagFilterField(model)
@register_filterset(VirtualCircuitTypeFilterSet)
class VirtualCircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = VirtualCircuitType
fieldsets = (
@ -326,6 +334,7 @@ class VirtualCircuitTypeFilterForm(FilterModifierMixin, OrganizationalModelFilte
)
@register_filterset(VirtualCircuitFilterSet)
class VirtualCircuitFilterForm(
FilterModifierMixin,
TenancyFilterForm,
@ -374,6 +383,7 @@ class VirtualCircuitFilterForm(
tag = TagFilterField(model)
@register_filterset(VirtualCircuitTerminationFilterSet)
class VirtualCircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = VirtualCircuitTermination
fieldsets = (
@ -405,17 +415,3 @@ class VirtualCircuitTerminationFilterForm(FilterModifierMixin, NetBoxModelFilter
label=_('Provider')
)
tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[ProviderFilterForm] = ProviderFilterSet
FILTERSET_MAPPINGS[ProviderAccountFilterForm] = ProviderAccountFilterSet
FILTERSET_MAPPINGS[ProviderNetworkFilterForm] = ProviderNetworkFilterSet
FILTERSET_MAPPINGS[CircuitTypeFilterForm] = CircuitTypeFilterSet
FILTERSET_MAPPINGS[CircuitFilterForm] = CircuitFilterSet
FILTERSET_MAPPINGS[CircuitTerminationFilterForm] = CircuitTerminationFilterSet
FILTERSET_MAPPINGS[CircuitGroupFilterForm] = CircuitGroupFilterSet
FILTERSET_MAPPINGS[CircuitGroupAssignmentFilterForm] = CircuitGroupAssignmentFilterSet
FILTERSET_MAPPINGS[VirtualCircuitTypeFilterForm] = VirtualCircuitTypeFilterSet
FILTERSET_MAPPINGS[VirtualCircuitFilterForm] = VirtualCircuitFilterSet
FILTERSET_MAPPINGS[VirtualCircuitTerminationFilterForm] = VirtualCircuitTerminationFilterSet

View File

@ -7,11 +7,10 @@ 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
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset
from utilities.forms.fields import (
ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
)
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import DateTimePicker
@ -26,6 +25,7 @@ __all__ = (
)
@register_filterset(DataSourceFilterSet)
class DataSourceFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = DataSource
fieldsets = (
@ -57,6 +57,7 @@ class DataSourceFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(DataFileFilterSet)
class DataFileFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = DataFile
fieldsets = (
@ -70,6 +71,7 @@ class DataFileFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
)
@register_filterset(JobFilterSet)
class JobFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = Job
fieldsets = (
@ -137,6 +139,7 @@ class JobFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
)
@register_filterset(ObjectChangeFilterSet)
class ObjectChangeFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ObjectChange
fieldsets = (
@ -171,16 +174,9 @@ class ObjectChangeFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm)
)
@register_filterset(ConfigRevisionFilterSet)
class ConfigRevisionFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ConfigRevision
fieldsets = (
FieldSet('q', 'filter_id'),
)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[DataSourceFilterForm] = DataSourceFilterSet
FILTERSET_MAPPINGS[DataFileFilterForm] = DataFileFilterSet
FILTERSET_MAPPINGS[JobFilterForm] = JobFilterSet
FILTERSET_MAPPINGS[ObjectChangeFilterForm] = ObjectChangeFilterSet
FILTERSET_MAPPINGS[ConfigRevisionFilterForm] = ConfigRevisionFilterSet

View File

@ -15,9 +15,8 @@ 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
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset
from utilities.forms.fields import ColorField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import NumberWithOptions
@ -150,6 +149,7 @@ class DeviceComponentFilterForm(NetBoxModelFilterSetForm):
)
@register_filterset(RegionFilterSet)
class RegionFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = Region
fieldsets = (
@ -165,6 +165,7 @@ class RegionFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGroupM
tag = TagFilterField(model)
@register_filterset(SiteGroupFilterSet)
class SiteGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = SiteGroup
fieldsets = (
@ -180,6 +181,7 @@ class SiteGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, NestedGro
tag = TagFilterField(model)
@register_filterset(SiteFilterSet)
class SiteFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Site
fieldsets = (
@ -212,6 +214,7 @@ class SiteFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterF
tag = TagFilterField(model)
@register_filterset(LocationFilterSet)
class LocationFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, NestedGroupModelFilterSetForm):
model = Location
fieldsets = (
@ -260,6 +263,7 @@ class LocationFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFil
tag = TagFilterField(model)
@register_filterset(RackRoleFilterSet)
class RackRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = RackRole
fieldsets = (
@ -311,6 +315,7 @@ class RackBaseFilterForm(PrimaryModelFilterSetForm):
)
@register_filterset(RackTypeFilterSet)
class RackTypeFilterForm(FilterModifierMixin, RackBaseFilterForm):
model = RackType
fieldsets = (
@ -333,6 +338,7 @@ class RackTypeFilterForm(FilterModifierMixin, RackBaseFilterForm):
tag = TagFilterField(model)
@register_filterset(RackFilterSet)
class RackFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, RackBaseFilterForm):
model = Rack
fieldsets = (
@ -434,6 +440,7 @@ class RackElevationFilterForm(RackFilterForm):
)
@register_filterset(RackReservationFilterSet)
class RackReservationFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = RackReservation
fieldsets = (
@ -492,6 +499,7 @@ class RackReservationFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryM
tag = TagFilterField(model)
@register_filterset(ManufacturerFilterSet)
class ManufacturerFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = Manufacturer
fieldsets = (
@ -501,6 +509,7 @@ class ManufacturerFilterForm(FilterModifierMixin, ContactModelFilterForm, Organi
tag = TagFilterField(model)
@register_filterset(DeviceTypeFilterSet)
class DeviceTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = DeviceType
fieldsets = (
@ -635,6 +644,7 @@ class DeviceTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
)
@register_filterset(ModuleTypeProfileFilterSet)
class ModuleTypeProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ModuleTypeProfile
fieldsets = (
@ -644,6 +654,7 @@ class ModuleTypeProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm
tag = TagFilterField(model)
@register_filterset(ModuleTypeFilterSet)
class ModuleTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ModuleType
fieldsets = (
@ -737,6 +748,7 @@ class ModuleTypeFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
)
@register_filterset(DeviceRoleFilterSet)
class DeviceRoleFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = DeviceRole
fieldsets = (
@ -756,6 +768,7 @@ class DeviceRoleFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(PlatformFilterSet)
class PlatformFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = Platform
fieldsets = (
@ -781,6 +794,7 @@ class PlatformFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(DeviceFilterSet)
class DeviceFilterForm(
FilterModifierMixin,
LocalConfigContextFilterForm,
@ -980,6 +994,7 @@ class DeviceFilterForm(
tag = TagFilterField(model)
@register_filterset(VirtualDeviceContextFilterSet)
class VirtualDeviceContextFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = VirtualDeviceContext
fieldsets = (
@ -1007,6 +1022,7 @@ class VirtualDeviceContextFilterForm(FilterModifierMixin, TenancyFilterForm, Pri
tag = TagFilterField(model)
@register_filterset(ModuleFilterSet)
class ModuleFilterForm(FilterModifierMixin, LocalConfigContextFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Module
fieldsets = (
@ -1090,6 +1106,7 @@ class ModuleFilterForm(FilterModifierMixin, LocalConfigContextFilterForm, Tenanc
tag = TagFilterField(model)
@register_filterset(VirtualChassisFilterSet)
class VirtualChassisFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = VirtualChassis
fieldsets = (
@ -1119,6 +1136,7 @@ class VirtualChassisFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryMo
tag = TagFilterField(model)
@register_filterset(CableFilterSet)
class CableFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Cable
fieldsets = (
@ -1208,6 +1226,7 @@ class CableFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilter
tag = TagFilterField(model)
@register_filterset(PowerPanelFilterSet)
class PowerPanelFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = PowerPanel
fieldsets = (
@ -1247,6 +1266,7 @@ class PowerPanelFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryM
tag = TagFilterField(model)
@register_filterset(PowerFeedFilterSet)
class PowerFeedFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = PowerFeed
fieldsets = (
@ -1357,6 +1377,7 @@ class PathEndpointFilterForm(CabledFilterForm):
)
@register_filterset(ConsolePortFilterSet)
class ConsolePortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = ConsolePort
fieldsets = (
@ -1381,6 +1402,7 @@ class ConsolePortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceC
tag = TagFilterField(model)
@register_filterset(ConsoleServerPortFilterSet)
class ConsoleServerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = ConsoleServerPort
fieldsets = (
@ -1406,6 +1428,7 @@ class ConsoleServerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, D
tag = TagFilterField(model)
@register_filterset(PowerPortFilterSet)
class PowerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = PowerPort
fieldsets = (
@ -1425,6 +1448,7 @@ class PowerPortFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceCom
tag = TagFilterField(model)
@register_filterset(PowerOutletFilterSet)
class PowerOutletFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = PowerOutlet
fieldsets = (
@ -1454,6 +1478,7 @@ class PowerOutletFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceC
)
@register_filterset(InterfaceFilterSet)
class InterfaceFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceComponentFilterForm):
model = Interface
fieldsets = (
@ -1580,6 +1605,7 @@ class InterfaceFilterForm(FilterModifierMixin, PathEndpointFilterForm, DeviceCom
tag = TagFilterField(model)
@register_filterset(FrontPortFilterSet)
class FrontPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponentFilterForm):
fieldsets = (
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
@ -1603,6 +1629,7 @@ class FrontPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponent
tag = TagFilterField(model)
@register_filterset(RearPortFilterSet)
class RearPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponentFilterForm):
model = RearPort
fieldsets = (
@ -1627,6 +1654,7 @@ class RearPortFilterForm(FilterModifierMixin, CabledFilterForm, DeviceComponentF
tag = TagFilterField(model)
@register_filterset(ModuleBayFilterSet)
class ModuleBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
model = ModuleBay
fieldsets = (
@ -1645,6 +1673,7 @@ class ModuleBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
)
@register_filterset(DeviceBayFilterSet)
class DeviceBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
model = DeviceBay
fieldsets = (
@ -1659,6 +1688,7 @@ class DeviceBayFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
tag = TagFilterField(model)
@register_filterset(InventoryItemFilterSet)
class InventoryItemFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
model = InventoryItem
fieldsets = (
@ -1710,6 +1740,7 @@ class InventoryItemFilterForm(FilterModifierMixin, DeviceComponentFilterForm):
# Device component roles
#
@register_filterset(InventoryItemRoleFilterSet)
class InventoryItemRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = InventoryItemRole
fieldsets = (
@ -1722,6 +1753,7 @@ class InventoryItemRoleFilterForm(FilterModifierMixin, OrganizationalModelFilter
# Addressing
#
@register_filterset(MACAddressFilterSet)
class MACAddressFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = MACAddress
fieldsets = (
@ -1835,39 +1867,3 @@ class InterfaceConnectionFilterForm(FilterForm):
},
label=_('Device')
)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[CableFilterForm] = CableFilterSet
FILTERSET_MAPPINGS[ConsolePortFilterForm] = ConsolePortFilterSet
FILTERSET_MAPPINGS[ConsoleServerPortFilterForm] = ConsoleServerPortFilterSet
FILTERSET_MAPPINGS[DeviceBayFilterForm] = DeviceBayFilterSet
FILTERSET_MAPPINGS[DeviceFilterForm] = DeviceFilterSet
FILTERSET_MAPPINGS[DeviceRoleFilterForm] = DeviceRoleFilterSet
FILTERSET_MAPPINGS[DeviceTypeFilterForm] = DeviceTypeFilterSet
FILTERSET_MAPPINGS[FrontPortFilterForm] = FrontPortFilterSet
FILTERSET_MAPPINGS[InterfaceFilterForm] = InterfaceFilterSet
FILTERSET_MAPPINGS[InventoryItemFilterForm] = InventoryItemFilterSet
FILTERSET_MAPPINGS[InventoryItemRoleFilterForm] = InventoryItemRoleFilterSet
FILTERSET_MAPPINGS[LocationFilterForm] = LocationFilterSet
FILTERSET_MAPPINGS[MACAddressFilterForm] = MACAddressFilterSet
FILTERSET_MAPPINGS[ManufacturerFilterForm] = ManufacturerFilterSet
FILTERSET_MAPPINGS[ModuleBayFilterForm] = ModuleBayFilterSet
FILTERSET_MAPPINGS[ModuleFilterForm] = ModuleFilterSet
FILTERSET_MAPPINGS[ModuleTypeFilterForm] = ModuleTypeFilterSet
FILTERSET_MAPPINGS[ModuleTypeProfileFilterForm] = ModuleTypeProfileFilterSet
FILTERSET_MAPPINGS[PlatformFilterForm] = PlatformFilterSet
FILTERSET_MAPPINGS[PowerFeedFilterForm] = PowerFeedFilterSet
FILTERSET_MAPPINGS[PowerOutletFilterForm] = PowerOutletFilterSet
FILTERSET_MAPPINGS[PowerPanelFilterForm] = PowerPanelFilterSet
FILTERSET_MAPPINGS[PowerPortFilterForm] = PowerPortFilterSet
FILTERSET_MAPPINGS[RackFilterForm] = RackFilterSet
FILTERSET_MAPPINGS[RackReservationFilterForm] = RackReservationFilterSet
FILTERSET_MAPPINGS[RackRoleFilterForm] = RackRoleFilterSet
FILTERSET_MAPPINGS[RackTypeFilterForm] = RackTypeFilterSet
FILTERSET_MAPPINGS[RearPortFilterForm] = RearPortFilterSet
FILTERSET_MAPPINGS[RegionFilterForm] = RegionFilterSet
FILTERSET_MAPPINGS[SiteFilterForm] = SiteFilterSet
FILTERSET_MAPPINGS[SiteGroupFilterForm] = SiteGroupFilterSet
FILTERSET_MAPPINGS[VirtualChassisFilterForm] = VirtualChassisFilterSet
FILTERSET_MAPPINGS[VirtualDeviceContextFilterForm] = VirtualDeviceContextFilterSet

View File

@ -10,12 +10,11 @@ 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
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, add_blank_choice, register_filterset
from utilities.forms.fields import (
ContentTypeChoiceField, ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField,
TagFilterField,
)
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import DateTimePicker
@ -42,6 +41,7 @@ __all__ = (
)
@register_filterset(CustomFieldFilterSet)
class CustomFieldFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = CustomField
fieldsets = (
@ -129,6 +129,7 @@ class CustomFieldFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
)
@register_filterset(CustomFieldChoiceSetFilterSet)
class CustomFieldChoiceSetFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = CustomFieldChoiceSet
fieldsets = (
@ -149,6 +150,7 @@ class CustomFieldChoiceSetFilterForm(FilterModifierMixin, SavedFiltersMixin, Fil
)
@register_filterset(CustomLinkFilterSet)
class CustomLinkFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = CustomLink
fieldsets = (
@ -185,6 +187,7 @@ class CustomLinkFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
)
@register_filterset(ExportTemplateFilterSet)
class ExportTemplateFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ExportTemplate
fieldsets = (
@ -236,6 +239,7 @@ class ExportTemplateFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterFor
)
@register_filterset(ImageAttachmentFilterSet)
class ImageAttachmentFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ImageAttachment
fieldsets = (
@ -253,6 +257,7 @@ class ImageAttachmentFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterFo
)
@register_filterset(SavedFilterFilterSet)
class SavedFilterFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = SavedFilter
fieldsets = (
@ -289,6 +294,7 @@ class SavedFilterFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
)
@register_filterset(TableConfigFilterSet)
class TableConfigFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
fieldsets = (
FieldSet('q', 'filter_id'),
@ -319,6 +325,7 @@ class TableConfigFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
)
@register_filterset(WebhookFilterSet)
class WebhookFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = Webhook
fieldsets = (
@ -346,6 +353,7 @@ class WebhookFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(EventRuleFilterSet)
class EventRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = EventRule
fieldsets = (
@ -382,6 +390,7 @@ class EventRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(TagFilterSet)
class TagFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = Tag
content_type_id = ContentTypeMultipleChoiceField(
@ -401,6 +410,7 @@ class TagFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
)
@register_filterset(ConfigContextProfileFilterSet)
class ConfigContextProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ConfigContextProfile
fieldsets = (
@ -422,6 +432,7 @@ class ConfigContextProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetF
)
@register_filterset(ConfigContextFilterSet)
class ConfigContextFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ConfigContext
fieldsets = (
@ -523,6 +534,7 @@ class ConfigContextFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm
)
@register_filterset(ConfigTemplateFilterSet)
class ConfigTemplateFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = ConfigTemplate
fieldsets = (
@ -587,6 +599,7 @@ class LocalConfigContextFilterForm(forms.Form):
)
@register_filterset(JournalEntryFilterSet)
class JournalEntryFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = JournalEntry
fieldsets = (
@ -622,6 +635,7 @@ class JournalEntryFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(NotificationGroupFilterSet)
class NotificationGroupFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = NotificationGroup
user_id = DynamicModelMultipleChoiceField(
@ -634,21 +648,3 @@ class NotificationGroupFilterForm(FilterModifierMixin, SavedFiltersMixin, Filter
required=False,
label=_('Group')
)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[CustomFieldFilterForm] = CustomFieldFilterSet
FILTERSET_MAPPINGS[CustomFieldChoiceSetFilterForm] = CustomFieldChoiceSetFilterSet
FILTERSET_MAPPINGS[CustomLinkFilterForm] = CustomLinkFilterSet
FILTERSET_MAPPINGS[ExportTemplateFilterForm] = ExportTemplateFilterSet
FILTERSET_MAPPINGS[ImageAttachmentFilterForm] = ImageAttachmentFilterSet
FILTERSET_MAPPINGS[SavedFilterFilterForm] = SavedFilterFilterSet
FILTERSET_MAPPINGS[TableConfigFilterForm] = TableConfigFilterSet
FILTERSET_MAPPINGS[WebhookFilterForm] = WebhookFilterSet
FILTERSET_MAPPINGS[EventRuleFilterForm] = EventRuleFilterSet
FILTERSET_MAPPINGS[TagFilterForm] = TagFilterSet
FILTERSET_MAPPINGS[ConfigContextProfileFilterForm] = ConfigContextProfileFilterSet
FILTERSET_MAPPINGS[ConfigContextFilterForm] = ConfigContextFilterSet
FILTERSET_MAPPINGS[ConfigTemplateFilterForm] = ConfigTemplateFilterSet
FILTERSET_MAPPINGS[JournalEntryFilterForm] = JournalEntryFilterSet
FILTERSET_MAPPINGS[NotificationGroupFilterForm] = NotificationGroupFilterSet

View File

@ -8,9 +8,8 @@ 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
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice, register_filterset
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from virtualization.models import VirtualMachine, ClusterGroup, Cluster
@ -45,6 +44,7 @@ IPADDRESS_MASK_LENGTH_CHOICES = add_blank_choice([
])
@register_filterset(VRFFilterSet)
class VRFFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = VRF
fieldsets = (
@ -65,6 +65,7 @@ class VRFFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSe
tag = TagFilterField(model)
@register_filterset(RouteTargetFilterSet)
class RouteTargetFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = RouteTarget
fieldsets = (
@ -85,6 +86,7 @@ class RouteTargetFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModel
tag = TagFilterField(model)
@register_filterset(RIRFilterSet)
class RIRFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = RIR
fieldsets = (
@ -101,6 +103,7 @@ class RIRFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(AggregateFilterSet)
class AggregateFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Aggregate
fieldsets = (
@ -122,6 +125,7 @@ class AggregateFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFi
tag = TagFilterField(model)
@register_filterset(ASNRangeFilterSet)
class ASNRangeFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm):
model = ASNRange
fieldsets = (
@ -145,6 +149,7 @@ class ASNRangeFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalM
tag = TagFilterField(model)
@register_filterset(ASNFilterSet)
class ASNFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = ASN
fieldsets = (
@ -170,6 +175,7 @@ class ASNFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSe
tag = TagFilterField(model)
@register_filterset(RoleFilterSet)
class RoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = Role
fieldsets = (
@ -178,6 +184,7 @@ class RoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(PrefixFilterSet)
class PrefixFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Prefix
fieldsets = (
@ -284,6 +291,7 @@ class PrefixFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilte
tag = TagFilterField(model)
@register_filterset(IPRangeFilterSet)
class IPRangeFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = IPRange
fieldsets = (
@ -331,6 +339,7 @@ class IPRangeFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilt
tag = TagFilterField(model)
@register_filterset(IPAddressFilterSet)
class IPAddressFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = IPAddress
fieldsets = (
@ -409,6 +418,7 @@ class IPAddressFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFi
tag = TagFilterField(model)
@register_filterset(FHRPGroupFilterSet)
class FHRPGroupFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = FHRPGroup
fieldsets = (
@ -442,6 +452,7 @@ class FHRPGroupFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(VLANGroupFilterSet)
class VLANGroupFilterForm(FilterModifierMixin, TenancyFilterForm, OrganizationalModelFilterSetForm):
fieldsets = (
FieldSet('q', 'filter_id', 'tag', 'owner_id'),
@ -495,6 +506,7 @@ class VLANGroupFilterForm(FilterModifierMixin, TenancyFilterForm, Organizational
tag = TagFilterField(model)
@register_filterset(VLANTranslationPolicyFilterSet)
class VLANTranslationPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = VLANTranslationPolicy
fieldsets = (
@ -508,6 +520,7 @@ class VLANTranslationPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSet
tag = TagFilterField(model)
@register_filterset(VLANTranslationRuleFilterSet)
class VLANTranslationRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = VLANTranslationRule
fieldsets = (
@ -532,6 +545,7 @@ class VLANTranslationRuleFilterForm(FilterModifierMixin, NetBoxModelFilterSetFor
)
@register_filterset(VLANFilterSet)
class VLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = VLAN
fieldsets = (
@ -604,6 +618,7 @@ class VLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterS
tag = TagFilterField(model)
@register_filterset(ServiceTemplateFilterSet)
class ServiceTemplateFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = ServiceTemplate
fieldsets = (
@ -622,6 +637,7 @@ class ServiceTemplateFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(ServiceFilterSet)
class ServiceFilterForm(ContactModelFilterForm, ServiceTemplateFilterForm):
model = Service
fieldsets = (
@ -646,23 +662,3 @@ class ServiceFilterForm(ContactModelFilterForm, ServiceTemplateFilterForm):
label=_('FHRP Group'),
)
tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[AggregateFilterForm] = AggregateFilterSet
FILTERSET_MAPPINGS[ASNFilterForm] = ASNFilterSet
FILTERSET_MAPPINGS[ASNRangeFilterForm] = ASNRangeFilterSet
FILTERSET_MAPPINGS[FHRPGroupFilterForm] = FHRPGroupFilterSet
FILTERSET_MAPPINGS[IPAddressFilterForm] = IPAddressFilterSet
FILTERSET_MAPPINGS[IPRangeFilterForm] = IPRangeFilterSet
FILTERSET_MAPPINGS[PrefixFilterForm] = PrefixFilterSet
FILTERSET_MAPPINGS[RIRFilterForm] = RIRFilterSet
FILTERSET_MAPPINGS[RoleFilterForm] = RoleFilterSet
FILTERSET_MAPPINGS[RouteTargetFilterForm] = RouteTargetFilterSet
FILTERSET_MAPPINGS[ServiceFilterForm] = ServiceFilterSet
FILTERSET_MAPPINGS[ServiceTemplateFilterForm] = ServiceTemplateFilterSet
FILTERSET_MAPPINGS[VLANFilterForm] = VLANFilterSet
FILTERSET_MAPPINGS[VLANGroupFilterForm] = VLANGroupFilterSet
FILTERSET_MAPPINGS[VLANTranslationPolicyFilterForm] = VLANTranslationPolicyFilterSet
FILTERSET_MAPPINGS[VLANTranslationRuleFilterForm] = VLANTranslationRuleFilterSet
FILTERSET_MAPPINGS[VRFFilterForm] = VRFFilterSet

View File

@ -26,6 +26,7 @@ registry = Registry({
'data_backends': dict(),
'denormalized_fields': collections.defaultdict(list),
'event_types': dict(),
'filtersets': dict(),
'model_features': dict(),
'models': collections.defaultdict(set),
'plugins': dict(),

View File

@ -13,7 +13,7 @@ from tenancy.forms import ContactModelFilterForm
from utilities.forms.fields import (
ContentTypeMultipleChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
)
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms import register_filterset
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
@ -31,6 +31,7 @@ __all__ = (
# Tenants
#
@register_filterset(TenantGroupFilterSet)
class TenantGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = TenantGroup
fieldsets = (
@ -45,6 +46,7 @@ class TenantGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(TenantFilterSet)
class TenantFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Tenant
fieldsets = (
@ -65,6 +67,7 @@ class TenantFilterForm(FilterModifierMixin, ContactModelFilterForm, PrimaryModel
# Contacts
#
@register_filterset(ContactGroupFilterSet)
class ContactGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = ContactGroup
fieldsets = (
@ -79,6 +82,7 @@ class ContactGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm)
tag = TagFilterField(model)
@register_filterset(ContactRoleFilterSet)
class ContactRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = ContactRole
fieldsets = (
@ -87,6 +91,7 @@ class ContactRoleFilterForm(FilterModifierMixin, OrganizationalModelFilterSetFor
tag = TagFilterField(model)
@register_filterset(ContactFilterSet)
class ContactFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = Contact
fieldsets = (
@ -102,6 +107,7 @@ class ContactFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(ContactAssignmentFilterSet)
class ContactAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = ContactAssignment
fieldsets = (
@ -134,12 +140,3 @@ class ContactAssignmentFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm)
required=False
)
tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[ContactAssignmentFilterForm] = ContactAssignmentFilterSet
FILTERSET_MAPPINGS[ContactFilterForm] = ContactFilterSet
FILTERSET_MAPPINGS[ContactGroupFilterForm] = ContactGroupFilterSet
FILTERSET_MAPPINGS[ContactRoleFilterForm] = ContactRoleFilterSet
FILTERSET_MAPPINGS[TenantFilterForm] = TenantFilterSet
FILTERSET_MAPPINGS[TenantGroupFilterForm] = TenantGroupFilterSet

View File

@ -5,9 +5,8 @@ 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
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, FilterForm, register_filterset
from utilities.forms.fields import DynamicModelMultipleChoiceField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from utilities.forms.utils import add_blank_choice
@ -24,6 +23,7 @@ __all__ = (
)
@register_filterset(GroupFilterSet)
class GroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = Group
fieldsets = (
@ -31,6 +31,7 @@ class GroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
)
@register_filterset(UserFilterSet)
class UserFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = User
fieldsets = (
@ -59,6 +60,7 @@ class UserFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
)
@register_filterset(ObjectPermissionFilterSet)
class ObjectPermissionFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = ObjectPermission
fieldsets = (
@ -113,6 +115,7 @@ class ObjectPermissionFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
)
@register_filterset(TokenFilterSet)
class TokenFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
model = Token
fieldsets = (
@ -154,6 +157,7 @@ class TokenFilterForm(FilterModifierMixin, SavedFiltersMixin, FilterForm):
)
@register_filterset(OwnerGroupFilterSet)
class OwnerGroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = OwnerGroup
fieldsets = (
@ -161,6 +165,7 @@ class OwnerGroupFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
)
@register_filterset(OwnerFilterSet)
class OwnerFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = Owner
fieldsets = (
@ -183,12 +188,3 @@ class OwnerFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
required=False,
label=_('Users')
)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[GroupFilterForm] = GroupFilterSet
FILTERSET_MAPPINGS[UserFilterForm] = UserFilterSet
FILTERSET_MAPPINGS[ObjectPermissionFilterForm] = ObjectPermissionFilterSet
FILTERSET_MAPPINGS[TokenFilterForm] = TokenFilterSet
FILTERSET_MAPPINGS[OwnerGroupFilterForm] = OwnerGroupFilterSet
FILTERSET_MAPPINGS[OwnerFilterForm] = OwnerFilterSet

View File

@ -2,3 +2,22 @@ from .constants import *
from .forms import *
from .mixins import *
from .utils import *
def register_filterset(filterset_class):
"""
Decorator for registering a FilterForm -> FilterSet mapping.
Usage:
@register_filterset(DeviceFilterSet)
class DeviceFilterForm(NetBoxModelFilterSetForm):
...
Args:
filterset_class: The corresponding filterset class
"""
def decorator(form_class):
from netbox.registry import registry
registry['filtersets'][form_class] = filterset_class
return form_class
return decorator

View File

@ -1,11 +0,0 @@
# Mapping of filter form classes to their corresponding FilterSet classes
# This enables the FilterModifierMixin to verify which lookups are actually supported
# by checking the FilterSet's auto-generated lookup filters.
#
# Usage:
# from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
# from .forms.filtersets import XFilterForm
# from .filtersets import XFilterSet
# FILTERSET_MAPPINGS[XFilterForm] = XFilterSet
FILTERSET_MAPPINGS = {}

View File

@ -172,10 +172,10 @@ class FilterModifierMixin:
def _enhance_fields_with_modifiers(self):
"""Wrap compatible field widgets with FilterModifierWidget."""
from utilities.forms.widgets import FilterModifierWidget
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from netbox.registry import registry
# Get the corresponding FilterSet if registered
filterset_class = FILTERSET_MAPPINGS.get(self.__class__)
filterset_class = registry['filtersets'].get(self.__class__)
filterset = filterset_class() if filterset_class else None
for field_name, field in self.fields.items():

View File

@ -9,9 +9,8 @@ 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
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, register_filterset
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from virtualization.choices import *
@ -29,6 +28,7 @@ __all__ = (
)
@register_filterset(ClusterTypeFilterSet)
class ClusterTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetForm):
model = ClusterType
fieldsets = (
@ -37,6 +37,7 @@ class ClusterTypeFilterForm(FilterModifierMixin, OrganizationalModelFilterSetFor
tag = TagFilterField(model)
@register_filterset(ClusterGroupFilterSet)
class ClusterGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = ClusterGroup
tag = TagFilterField(model)
@ -46,6 +47,7 @@ class ClusterGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, Organi
)
@register_filterset(ClusterFilterSet)
class ClusterFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilterForm, PrimaryModelFilterSetForm):
model = Cluster
fieldsets = (
@ -100,6 +102,7 @@ class ClusterFilterForm(FilterModifierMixin, TenancyFilterForm, ContactModelFilt
tag = TagFilterField(model)
@register_filterset(VirtualMachineFilterSet)
class VirtualMachineFilterForm(
FilterModifierMixin,
LocalConfigContextFilterForm,
@ -209,6 +212,7 @@ class VirtualMachineFilterForm(
tag = TagFilterField(model)
@register_filterset(VMInterfaceFilterSet)
class VMInterfaceFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = VMInterface
fieldsets = (
@ -271,6 +275,7 @@ class VMInterfaceFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(VirtualDiskFilterSet)
class VirtualDiskFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = VirtualDisk
fieldsets = (
@ -294,12 +299,3 @@ class VirtualDiskFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
label=_('Owner'),
)
tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[ClusterFilterForm] = ClusterFilterSet
FILTERSET_MAPPINGS[ClusterGroupFilterForm] = ClusterGroupFilterSet
FILTERSET_MAPPINGS[ClusterTypeFilterForm] = ClusterTypeFilterSet
FILTERSET_MAPPINGS[VirtualDiskFilterForm] = VirtualDiskFilterSet
FILTERSET_MAPPINGS[VirtualMachineFilterForm] = VirtualMachineFilterSet
FILTERSET_MAPPINGS[VMInterfaceFilterForm] = VMInterfaceFilterSet

View File

@ -9,7 +9,7 @@ from tenancy.forms import ContactModelFilterForm, TenancyFilterForm
from utilities.forms.fields import (
ContentTypeMultipleChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, TagFilterField,
)
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms import register_filterset
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from utilities.forms.utils import add_blank_choice
@ -33,6 +33,7 @@ __all__ = (
)
@register_filterset(TunnelGroupFilterSet)
class TunnelGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, OrganizationalModelFilterSetForm):
model = TunnelGroup
fieldsets = (
@ -42,6 +43,7 @@ class TunnelGroupFilterForm(FilterModifierMixin, ContactModelFilterForm, Organiz
tag = TagFilterField(model)
@register_filterset(TunnelFilterSet)
class TunnelFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = Tunnel
fieldsets = (
@ -78,6 +80,7 @@ class TunnelFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilte
tag = TagFilterField(model)
@register_filterset(TunnelTerminationFilterSet)
class TunnelTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = TunnelTermination
fieldsets = (
@ -97,6 +100,7 @@ class TunnelTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm)
tag = TagFilterField(model)
@register_filterset(IKEProposalFilterSet)
class IKEProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IKEProposal
fieldsets = (
@ -128,6 +132,7 @@ class IKEProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(IKEPolicyFilterSet)
class IKEPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IKEPolicy
fieldsets = (
@ -152,6 +157,7 @@ class IKEPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(IPSecProposalFilterSet)
class IPSecProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IPSecProposal
fieldsets = (
@ -171,6 +177,7 @@ class IPSecProposalFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(IPSecPolicyFilterSet)
class IPSecPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IPSecPolicy
fieldsets = (
@ -190,6 +197,7 @@ class IPSecPolicyFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(IPSecProfileFilterSet)
class IPSecProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
model = IPSecProfile
fieldsets = (
@ -214,6 +222,7 @@ class IPSecProfileFilterForm(FilterModifierMixin, PrimaryModelFilterSetForm):
tag = TagFilterField(model)
@register_filterset(L2VPNFilterSet)
class L2VPNFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilterForm, PrimaryModelFilterSetForm):
model = L2VPN
fieldsets = (
@ -245,6 +254,7 @@ class L2VPNFilterForm(FilterModifierMixin, ContactModelFilterForm, TenancyFilter
tag = TagFilterField(model)
@register_filterset(L2VPNTerminationFilterSet)
class L2VPNTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
model = L2VPNTermination
fieldsets = (
@ -307,16 +317,3 @@ class L2VPNTerminationFilterForm(FilterModifierMixin, NetBoxModelFilterSetForm):
label=_('Virtual Machine')
)
tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[IKEPolicyFilterForm] = IKEPolicyFilterSet
FILTERSET_MAPPINGS[IKEProposalFilterForm] = IKEProposalFilterSet
FILTERSET_MAPPINGS[IPSecPolicyFilterForm] = IPSecPolicyFilterSet
FILTERSET_MAPPINGS[IPSecProfileFilterForm] = IPSecProfileFilterSet
FILTERSET_MAPPINGS[IPSecProposalFilterForm] = IPSecProposalFilterSet
FILTERSET_MAPPINGS[L2VPNFilterForm] = L2VPNFilterSet
FILTERSET_MAPPINGS[L2VPNTerminationFilterForm] = L2VPNTerminationFilterSet
FILTERSET_MAPPINGS[TunnelFilterForm] = TunnelFilterSet
FILTERSET_MAPPINGS[TunnelGroupFilterForm] = TunnelGroupFilterSet
FILTERSET_MAPPINGS[TunnelTerminationFilterForm] = TunnelTerminationFilterSet

View File

@ -6,9 +6,8 @@ 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
from utilities.forms import add_blank_choice, register_filterset
from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField
from utilities.forms.filterset_mappings import FILTERSET_MAPPINGS
from utilities.forms.mixins import FilterModifierMixin
from utilities.forms.rendering import FieldSet
from wireless.choices import *
@ -22,6 +21,7 @@ __all__ = (
)
@register_filterset(WirelessLANGroupFilterSet)
class WirelessLANGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetForm):
model = WirelessLANGroup
fieldsets = (
@ -36,6 +36,7 @@ class WirelessLANGroupFilterForm(FilterModifierMixin, NestedGroupModelFilterSetF
tag = TagFilterField(model)
@register_filterset(WirelessLANFilterSet)
class WirelessLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = WirelessLAN
fieldsets = (
@ -102,6 +103,7 @@ class WirelessLANFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModel
tag = TagFilterField(model)
@register_filterset(WirelessLinkFilterSet)
class WirelessLinkFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryModelFilterSetForm):
model = WirelessLink
fieldsets = (
@ -143,9 +145,3 @@ class WirelessLinkFilterForm(FilterModifierMixin, TenancyFilterForm, PrimaryMode
required=False
)
tag = TagFilterField(model)
# Register FilterSet mappings for FilterModifierMixin lookup verification
FILTERSET_MAPPINGS[WirelessLANFilterForm] = WirelessLANFilterSet
FILTERSET_MAPPINGS[WirelessLANGroupFilterForm] = WirelessLANGroupFilterSet
FILTERSET_MAPPINGS[WirelessLinkFilterForm] = WirelessLinkFilterSet