diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 638f566e02..9bc6429aa9 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -24,35 +24,45 @@ 'CableFilterForm', 'ConsoleConnectionFilterForm', 'ConsolePortFilterForm', + 'ConsolePortTemplateFilterForm', 'ConsoleServerPortFilterForm', + 'ConsoleServerPortTemplateFilterForm', 'DeviceBayFilterForm', + 'DeviceBayTemplateFilterForm', 'DeviceFilterForm', 'DeviceRoleFilterForm', 'DeviceTypeFilterForm', 'FrontPortFilterForm', + 'FrontPortTemplateFilterForm', 'InterfaceConnectionFilterForm', 'InterfaceFilterForm', + 'InterfaceTemplateFilterForm', 'InventoryItemFilterForm', + 'InventoryItemTemplateFilterForm', 'InventoryItemRoleFilterForm', 'LocationFilterForm', 'MACAddressFilterForm', 'ManufacturerFilterForm', 'ModuleFilterForm', 'ModuleBayFilterForm', + 'ModuleBayTemplateFilterForm', 'ModuleTypeFilterForm', 'ModuleTypeProfileFilterForm', 'PlatformFilterForm', 'PowerConnectionFilterForm', 'PowerFeedFilterForm', 'PowerOutletFilterForm', + 'PowerOutletTemplateFilterForm', 'PowerPanelFilterForm', 'PowerPortFilterForm', + 'PowerPortTemplateFilterForm', 'RackFilterForm', 'RackElevationFilterForm', 'RackReservationFilterForm', 'RackRoleFilterForm', 'RackTypeFilterForm', 'RearPortFilterForm', + 'RearPortTemplateFilterForm', 'RegionFilterForm', 'SiteFilterForm', 'SiteGroupFilterForm', @@ -1290,6 +1300,18 @@ class PowerFeedFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): # Device components # +class DeviceComponentTemplateFilterForm(NetBoxModelFilterSetForm): + device_type_id = DynamicModelMultipleChoiceField( + queryset=DeviceType.objects.all(), required=False, label=_('Device type') + ) + module_type_id = DynamicModelMultipleChoiceField( + queryset=ModuleType.objects.all(), + required=False, + query_params={'manufacturer_id': '$manufacturer_id'}, + label=_('Module Type'), + ) + + class CabledFilterForm(forms.Form): cabled = forms.NullBooleanField( label=_('Cabled'), @@ -1342,6 +1364,25 @@ class ConsolePortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class ConsolePortTemplateFilterForm(DeviceComponentTemplateFilterForm, NetBoxModelFilterSetForm): + model = ConsolePortTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'type', 'speed', name=_('Attributes')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + type = forms.MultipleChoiceField( + label=_('Type'), + choices=ConsolePortTypeChoices, + required=False + ) + speed = forms.MultipleChoiceField( + label=_('Speed'), + choices=ConsolePortSpeedChoices, + required=False + ) + + class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): model = ConsoleServerPort fieldsets = ( @@ -1367,6 +1408,25 @@ class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterF tag = TagFilterField(model) +class ConsoleServerPortTemplateFilterForm(DeviceComponentTemplateFilterForm, NetBoxModelFilterSetForm): + model = ConsoleServerPortTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'type', 'speed', name=_('Attributes')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + type = forms.MultipleChoiceField( + label=_('Type'), + choices=ConsolePortTypeChoices, + required=False + ) + speed = forms.MultipleChoiceField( + label=_('Speed'), + choices=ConsolePortSpeedChoices, + required=False + ) + + class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): model = PowerPort fieldsets = ( @@ -1387,6 +1447,20 @@ class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class PowerPortTemplateFilterForm(DeviceComponentTemplateFilterForm, NetBoxModelFilterSetForm): + model = PowerPortTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'type', name=_('Attributes')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + type = forms.MultipleChoiceField( + label=_('Type'), + choices=PowerPortTypeChoices, + required=False + ) + + class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): model = PowerOutlet fieldsets = ( @@ -1416,6 +1490,24 @@ class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): ) +class PowerOutletTemplateFilterForm(DeviceComponentTemplateFilterForm, NetBoxModelFilterSetForm): + model = PowerOutletTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'type', 'color', name=_('Attributes')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + type = forms.MultipleChoiceField( + label=_('Type'), + choices=PowerOutletTypeChoices, + required=False + ) + color = ColorField( + label=_('Color'), + required=False + ) + + class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): model = Interface fieldsets = ( @@ -1543,6 +1635,50 @@ class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class InterfaceTemplateFilterForm(DeviceComponentTemplateFilterForm, NetBoxModelFilterSetForm): + model = InterfaceTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'kind', 'type', 'speed', 'duplex', 'enabled', 'mgmt_only', name=_('Attributes')), + FieldSet('poe_mode', 'poe_type', name=_('PoE')), + FieldSet('rf_role', 'rf_channel', 'rf_channel_width', 'tx_power', name=_('Wireless')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + + kind = forms.MultipleChoiceField( + label=_('Kind'), + choices=InterfaceKindChoices, + required=False + ) + mgmt_only = forms.NullBooleanField( + label=_('Mgmt only'), + required=False, + widget=forms.Select( + choices=BOOLEAN_WITH_BLANK_CHOICES + ) + ) + type = forms.MultipleChoiceField( + label=_('Type'), + choices=InterfaceTypeChoices, + required=False + ) + poe_mode = forms.MultipleChoiceField( + choices=InterfacePoEModeChoices, + required=False, + label=_('PoE mode') + ) + poe_type = forms.MultipleChoiceField( + choices=InterfacePoETypeChoices, + required=False, + label=_('PoE type') + ) + rf_role = forms.MultipleChoiceField( + choices=WirelessRoleChoices, + required=False, + label=_('Wireless role') + ) + + class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): fieldsets = ( FieldSet('q', 'filter_id', 'tag'), @@ -1567,6 +1703,24 @@ class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class FrontPortTemplateFilterForm(DeviceComponentTemplateFilterForm, NetBoxModelFilterSetForm): + model = FrontPortTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'type', 'color', name=_('Attributes')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + type = forms.MultipleChoiceField( + label=_('Type'), + choices=PortTypeChoices, + required=False + ) + color = ColorField( + label=_('Color'), + required=False + ) + + class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): model = RearPort fieldsets = ( @@ -1591,6 +1745,24 @@ class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class RearPortTemplateFilterForm(DeviceComponentTemplateFilterForm, NetBoxModelFilterSetForm): + model = RearPortTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'type', 'color', name=_('Attributes')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + type = forms.MultipleChoiceField( + label=_('Type'), + choices=PortTypeChoices, + required=False + ) + color = ColorField( + label=_('Color'), + required=False + ) + + class ModuleBayFilterForm(DeviceComponentFilterForm): model = ModuleBay fieldsets = ( @@ -1609,6 +1781,17 @@ class ModuleBayFilterForm(DeviceComponentFilterForm): ) +class ModuleBayTemplateFilterForm(DeviceComponentTemplateFilterForm, NetBoxModelFilterSetForm): + model = ModuleBayTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'position', name=_('Attributes')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + + position = forms.CharField(label=_('Position'), required=False) + + class DeviceBayFilterForm(DeviceComponentFilterForm): model = DeviceBay fieldsets = ( @@ -1623,6 +1806,19 @@ class DeviceBayFilterForm(DeviceComponentFilterForm): tag = TagFilterField(model) +class DeviceBayTemplateFilterForm(NetBoxModelFilterSetForm): + model = DeviceBayTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', name=_('Attributes')), + FieldSet('device_type_id', name=_('Device')), + ) + + device_type_id = DynamicModelMultipleChoiceField( + queryset=DeviceType.objects.all(), required=False, label=_('Device type') + ) + + class InventoryItemFilterForm(DeviceComponentFilterForm): model = InventoryItem fieldsets = ( @@ -1670,6 +1866,28 @@ class InventoryItemFilterForm(DeviceComponentFilterForm): tag = TagFilterField(model) +class InventoryItemTemplateFilterForm(NetBoxModelFilterSetForm): + model = InventoryItemTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'role_id', 'manufacturer_id', name=_('Attributes')), + FieldSet('device_type_id', name=_('Device')), + ) + role_id = DynamicModelMultipleChoiceField( + queryset=InventoryItemRole.objects.all(), + required=False, + label=_('Role') + ) + manufacturer_id = DynamicModelMultipleChoiceField( + queryset=Manufacturer.objects.all(), + required=False, + label=_('Manufacturer') + ) + device_type_id = DynamicModelMultipleChoiceField( + queryset=DeviceType.objects.all(), required=False, label=_('Device type') + ) + + # # Device component roles #