From a0b93bb4dfb0381d9ca717f4fa1e0773daad3ff1 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 20 Oct 2017 16:39:13 -0400 Subject: [PATCH] Fixes #1513: Correct filtering of custom field choices --- netbox/extras/filters.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/netbox/extras/filters.py b/netbox/extras/filters.py index 6bd5f3737..474410e65 100644 --- a/netbox/extras/filters.py +++ b/netbox/extras/filters.py @@ -19,17 +19,28 @@ class CustomFieldFilter(django_filters.Filter): super(CustomFieldFilter, self).__init__(*args, **kwargs) def filter(self, queryset, value): + # Skip filter on empty value if not value.strip(): return queryset - # Treat 0 as None for Select fields - try: - if self.cf_type == CF_TYPE_SELECT and int(value) == 0: - return queryset.exclude( - custom_field_values__field__name=self.name, - ) - except ValueError: - pass + + # Selection fields get special treatment (values must be integers) + if self.cf_type == CF_TYPE_SELECT: + try: + # Treat 0 as None + if int(value) == 0: + return queryset.exclude( + custom_field_values__field__name=self.name, + ) + # Match on exact CustomFieldChoice PK + else: + return queryset.filter( + custom_field_values__field__name=self.name, + custom_field_values__serialized_value=value, + ) + except ValueError: + return queryset.none() + return queryset.filter( custom_field_values__field__name=self.name, custom_field_values__serialized_value__icontains=value,