diff --git a/CHANGELOG.md b/CHANGELOG.md index 55857f1f0..b50a68cf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ NetBox now supports modeling physical cables for console, power, and interface c ## Changes From v2.5-beta2 +* [#2474](https://github.com/digitalocean/netbox/issues/2474) - Add `cabled` and `connection_status` filters for device components * [#2616](https://github.com/digitalocean/netbox/issues/2616) - Convert Rack `outer_unit` and Cable `length_unit` to integer-based choice fields * [#2622](https://github.com/digitalocean/netbox/issues/2622) - Enable filtering cables by multiple types/colors * [#2624](https://github.com/digitalocean/netbox/issues/2624) - Delete associated content type and permissions when removing InterfaceConnection model diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index e0772c212..9e4512b80 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -699,31 +699,51 @@ class DeviceComponentFilterSet(django_filters.FilterSet): class ConsolePortFilter(DeviceComponentFilterSet): + cabled = django_filters.BooleanFilter( + field_name='cable', + lookup_expr='isnull', + exclude=True + ) class Meta: model = ConsolePort - fields = ['name'] + fields = ['name', 'connection_status'] class ConsoleServerPortFilter(DeviceComponentFilterSet): + cabled = django_filters.BooleanFilter( + field_name='cable', + lookup_expr='isnull', + exclude=True + ) class Meta: model = ConsoleServerPort - fields = ['name'] + fields = ['name', 'connection_status'] class PowerPortFilter(DeviceComponentFilterSet): + cabled = django_filters.BooleanFilter( + field_name='cable', + lookup_expr='isnull', + exclude=True + ) class Meta: model = PowerPort - fields = ['name'] + fields = ['name', 'connection_status'] class PowerOutletFilter(DeviceComponentFilterSet): + cabled = django_filters.BooleanFilter( + field_name='cable', + lookup_expr='isnull', + exclude=True + ) class Meta: model = PowerOutlet - fields = ['name'] + fields = ['name', 'connection_status'] class InterfaceFilter(django_filters.FilterSet): @@ -740,6 +760,11 @@ class InterfaceFilter(django_filters.FilterSet): field_name='pk', label='Device (ID)', ) + cabled = django_filters.BooleanFilter( + field_name='cable', + lookup_expr='isnull', + exclude=True + ) type = django_filters.CharFilter( method='filter_type', label='Interface type', @@ -765,7 +790,7 @@ class InterfaceFilter(django_filters.FilterSet): class Meta: model = Interface - fields = ['name', 'form_factor', 'enabled', 'mtu', 'mgmt_only'] + fields = ['name', 'connection_status', 'form_factor', 'enabled', 'mtu', 'mgmt_only'] def filter_device(self, queryset, name, value): try: @@ -814,6 +839,11 @@ class InterfaceFilter(django_filters.FilterSet): class FrontPortFilter(DeviceComponentFilterSet): + cabled = django_filters.BooleanFilter( + field_name='cable', + lookup_expr='isnull', + exclude=True + ) class Meta: model = FrontPort @@ -821,6 +851,11 @@ class FrontPortFilter(DeviceComponentFilterSet): class RearPortFilter(DeviceComponentFilterSet): + cabled = django_filters.BooleanFilter( + field_name='cable', + lookup_expr='isnull', + exclude=True + ) class Meta: model = RearPort