Explorar el Código

Closes #2474: Add cabled and connection_status filters for device components

Jeremy Stretch hace 7 años
padre
commit
360303f86c
Se han modificado 2 ficheros con 41 adiciones y 5 borrados
  1. 1 0
      CHANGELOG.md
  2. 40 5
      netbox/dcim/filters.py

+ 1 - 0
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

+ 40 - 5
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