From 5a92975eab059b01068a3668e9d549fb4d5f84a0 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Mon, 21 Oct 2024 15:35:31 -0400 Subject: [PATCH] Search methods and registration --- netbox/ipam/filtersets.py | 23 +++++++++++++++++++++++ netbox/ipam/search.py | 21 +++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index a11e72706..7b282c6fd 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -1112,6 +1112,15 @@ class VLANTranslationPolicyFilterSet(NetBoxModelFilterSet): model = VLANTranslationPolicy fields = ('id', 'name', 'description') + def search(self, queryset, name, value): + if not value.strip(): + return queryset + qs_filter = ( + Q(name__icontains=value) | + Q(description__icontains=value) + ) + return queryset.filter(qs_filter) + class VLANTranslationRuleFilterSet(NetBoxModelFilterSet): @@ -1119,6 +1128,20 @@ class VLANTranslationRuleFilterSet(NetBoxModelFilterSet): model = VLANTranslationRule fields = ('id', 'policy', 'local_vid', 'remote_vid') + def search(self, queryset, name, value): + if not value.strip(): + return queryset + qs_filter = ( + Q(policy__name__icontains=value) + ) + try: + int_value = int(value.strip()) + qs_filter |= Q(local_vid=int_value) + qs_filter |= Q(remote_vid=int_value) + except ValueError: + pass + return queryset.filter(qs_filter) + class ServiceTemplateFilterSet(NetBoxModelFilterSet): port = NumericArrayFilter( diff --git a/netbox/ipam/search.py b/netbox/ipam/search.py index 16a8eba3c..d200abacf 100644 --- a/netbox/ipam/search.py +++ b/netbox/ipam/search.py @@ -160,6 +160,27 @@ class VLANGroupIndex(SearchIndex): display_attrs = ('scope_type', 'description') +@register_search +class VLANTranslationPolicyIndex(SearchIndex): + model = models.VLANTranslationPolicy + fields = ( + ('name', 100), + ('description', 500), + ) + display_attrs = ('description',) + + +@register_search +class VLANTranslationRuleIndex(SearchIndex): + model = models.VLANTranslationRule + fields = ( + ('policy', 100), + ('local_vid', 200), + ('remote_vid', 200), + ) + display_attrs = ('policy', 'local_vid', 'remote_vid') + + @register_search class VRFIndex(SearchIndex): model = models.VRF