Przeglądaj źródła

Closes #2194: Added 'address' filter to IPAddress model

Jeremy Stretch 7 lat temu
rodzic
commit
982b9454f8
1 zmienionych plików z 16 dodań i 0 usunięć
  1. 16 0
      netbox/ipam/filters.py

+ 16 - 0
netbox/ipam/filters.py

@@ -1,6 +1,7 @@
 from __future__ import unicode_literals
 
 import django_filters
+from django.core.exceptions import ValidationError
 from django.db.models import Q
 import netaddr
 from netaddr.core import AddrFormatError
@@ -233,6 +234,10 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
         method='search_by_parent',
         label='Parent prefix',
     )
+    address = django_filters.CharFilter(
+        method='filter_address',
+        label='Address',
+    )
     mask_length = django_filters.NumberFilter(
         method='filter_mask_length',
         label='Mask length',
@@ -313,6 +318,17 @@ class IPAddressFilter(CustomFieldFilterSet, django_filters.FilterSet):
         except (AddrFormatError, ValueError):
             return queryset.none()
 
+    def filter_address(self, queryset, name, value):
+        if not value.strip():
+            return queryset
+        try:
+            # Match address and subnet mask
+            if '/' in value:
+                return queryset.filter(address=value)
+            return queryset.filter(address__net_host=value)
+        except ValidationError:
+            return queryset.none()
+
     def filter_mask_length(self, queryset, name, value):
         if not value:
             return queryset