Просмотр исходного кода

Closes #2701: Enable filtering of prefixes by exact prefix value

Jeremy Stretch 7 лет назад
Родитель
Сommit
68cb8b6895
2 измененных файлов с 17 добавлено и 0 удалено
  1. 4 0
      CHANGELOG.md
  2. 13 0
      netbox/ipam/filters.py

+ 4 - 0
CHANGELOG.md

@@ -1,5 +1,9 @@
 v2.5.2 (FUTURE)
 
+## Enhancements
+
+* [#2701](https://github.com/digitalocean/netbox/issues/2701) - Enable filtering of prefixes by exact prefix value
+
 ## Bug Fixes
 
 * [#2707](https://github.com/digitalocean/netbox/issues/2707) - Correct permission evaluation for circuit termination cabling

+ 13 - 0
netbox/ipam/filters.py

@@ -112,6 +112,10 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet):
         method='search',
         label='Search',
     )
+    prefix = django_filters.CharFilter(
+        method='filter_prefix',
+        label='Prefix',
+    )
     within = django_filters.CharFilter(
         method='search_within',
         label='Within prefix',
@@ -197,6 +201,15 @@ class PrefixFilter(CustomFieldFilterSet, django_filters.FilterSet):
             pass
         return queryset.filter(qs_filter)
 
+    def filter_prefix(self, queryset, name, value):
+        if not value.strip():
+            return queryset
+        try:
+            query = str(netaddr.IPNetwork(value).cidr)
+            return queryset.filter(prefix=query)
+        except ValidationError:
+            return queryset.none()
+
     def search_within(self, queryset, name, value):
         value = value.strip()
         if not value: