diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 638f566e0..ba21ce260 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -24,35 +24,45 @@ __all__ = ( '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,23 @@ class PowerFeedFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): # Device components # +class DeviceComponentTemplateFilterForm(NetBoxModelFilterSetForm): + device_type_id = DynamicModelMultipleChoiceField( + queryset=DeviceType.objects.all(), + required=False, + label=_('Device type'), + ) + + +class ModularDeviceComponentTemplateFilterForm(DeviceComponentTemplateFilterForm): + 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 +1369,20 @@ class ConsolePortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class ConsolePortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm): + model = ConsolePortTemplate + 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=ConsolePortTypeChoices, + required=False + ) + + class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): model = ConsoleServerPort fieldsets = ( @@ -1367,6 +1408,20 @@ class ConsoleServerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterF tag = TagFilterField(model) +class ConsoleServerPortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm): + model = ConsoleServerPortTemplate + 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=ConsolePortTypeChoices, + required=False + ) + + class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): model = PowerPort fieldsets = ( @@ -1387,6 +1442,20 @@ class PowerPortFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class PowerPortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm): + 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 +1485,20 @@ class PowerOutletFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): ) +class PowerOutletTemplateFilterForm(ModularDeviceComponentTemplateFilterForm): + model = PowerOutletTemplate + 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=PowerOutletTypeChoices, + required=False + ) + + class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): model = Interface fieldsets = ( @@ -1543,6 +1626,51 @@ class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class InterfaceTemplateFilterForm(ModularDeviceComponentTemplateFilterForm): + model = InterfaceTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', 'type', 'enabled', 'mgmt_only', name=_('Attributes')), + FieldSet('poe_mode', 'poe_type', name=_('PoE')), + FieldSet('rf_role', name=_('Wireless')), + FieldSet('device_type_id', 'module_type_id', name=_('Device')), + ) + type = forms.MultipleChoiceField( + label=_('Type'), + choices=InterfaceTypeChoices, + required=False + ) + enabled = forms.NullBooleanField( + label=_('Enabled'), + required=False, + widget=forms.Select( + choices=BOOLEAN_WITH_BLANK_CHOICES + ) + ) + mgmt_only = forms.NullBooleanField( + label=_('Management only'), + required=False, + widget=forms.Select( + choices=BOOLEAN_WITH_BLANK_CHOICES + ) + ) + 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 +1695,24 @@ class FrontPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class FrontPortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm): + 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 +1737,24 @@ class RearPortFilterForm(CabledFilterForm, DeviceComponentFilterForm): tag = TagFilterField(model) +class RearPortTemplateFilterForm(ModularDeviceComponentTemplateFilterForm): + 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 +1773,19 @@ class ModuleBayFilterForm(DeviceComponentFilterForm): ) +class ModuleBayTemplateFilterForm(ModularDeviceComponentTemplateFilterForm): + 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 +1800,15 @@ class DeviceBayFilterForm(DeviceComponentFilterForm): tag = TagFilterField(model) +class DeviceBayTemplateFilterForm(DeviceComponentTemplateFilterForm): + model = DeviceBayTemplate + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', 'label', name=_('Attributes')), + FieldSet('device_type_id', name=_('Device')), + ) + + class InventoryItemFilterForm(DeviceComponentFilterForm): model = InventoryItem fieldsets = ( @@ -1670,6 +1856,25 @@ class InventoryItemFilterForm(DeviceComponentFilterForm): tag = TagFilterField(model) +class InventoryItemTemplateFilterForm(DeviceComponentTemplateFilterForm): + 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 component roles #