From 32205045bae2e894886737df78861711be6b9d3e Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Thu, 28 Oct 2021 16:40:51 -0400 Subject: [PATCH] Use multi-value filters for custom fields --- netbox/extras/models/customfields.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index 5f60c6fea..84ba13263 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -1,6 +1,7 @@ import re from datetime import datetime, date +import django_filters from django import forms from django.contrib.contenttypes.models import ContentType from django.contrib.postgres.fields import ArrayField @@ -8,11 +9,11 @@ from django.core.validators import RegexValidator, ValidationError from django.db import models from django.urls import reverse from django.utils.safestring import mark_safe -from django_filters import filters from extras.choices import * from extras.utils import FeatureQuery, extras_features from netbox.models import ChangeLoggedModel +from utilities import filters from utilities.forms import ( CSVChoiceField, DatePicker, LaxURLField, StaticSelectMultiple, StaticSelect, add_blank_choice, ) @@ -327,31 +328,29 @@ class CustomField(ChangeLoggedModel): CustomFieldTypeChoices.TYPE_LONGTEXT, CustomFieldTypeChoices.TYPE_URL, ): - filter_class = filters.CharFilter + filter_class = filters.MultiValueCharFilter if self.filter_logic == CustomFieldFilterLogicChoices.FILTER_LOOSE: kwargs['lookup_expr'] = 'icontains' # Integer elif self.type == CustomFieldTypeChoices.TYPE_INTEGER: - # TODO: Remove dirty hack to change lookup type from Decimal - filter_class = filters.NumberFilter - filter_class.field_class = forms.IntegerField + filter_class = filters.MultiValueNumberFilter # Boolean elif self.type == CustomFieldTypeChoices.TYPE_BOOLEAN: - filter_class = filters.BooleanFilter + filter_class = django_filters.BooleanFilter # Date elif self.type == CustomFieldTypeChoices.TYPE_DATE: - filter_class = filters.DateFilter + filter_class = filters.MultiValueDateFilter # Select elif self.type == CustomFieldTypeChoices.TYPE_SELECT: - filter_class = filters.CharFilter + filter_class = filters.MultiValueCharFilter # Multiselect elif self.type == CustomFieldTypeChoices.TYPE_MULTISELECT: - filter_class = filters.CharFilter + filter_class = filters.MultiValueCharFilter kwargs['lookup_expr'] = 'has_key' # Unsupported custom field type