Change to NullableMultipleChoiceFilter

This commit is contained in:
Brian Tiemann 2024-09-13 09:05:27 -04:00
parent 05ee5a5145
commit 98ba553466
3 changed files with 13 additions and 13 deletions

View File

@ -1,3 +1,4 @@
from django.conf import settings
from django.utils.translation import gettext_lazy as _
from utilities.choices import ChoiceSet
@ -1482,7 +1483,7 @@ class CableTypeChoices(ChoiceSet):
TYPE_AOC = 'aoc'
TYPE_POWER = 'power'
TYPE_USB = 'usb'
TYPE_EMPTY = 'EMPTY'
TYPE_EMPTY = settings.FILTERS_NULL_CHOICE_VALUE
CHOICES = (
(
@ -1519,7 +1520,7 @@ class CableTypeChoices(ChoiceSet):
_('Other'), (
(TYPE_USB, _('USB')),
(TYPE_POWER, _('Power')),
(TYPE_EMPTY, _('(unset)')),
(settings.FILTERS_NULL_CHOICE_VALUE, _('(unset)')),
)
)
)

View File

@ -18,7 +18,7 @@ from tenancy.models import *
from users.models import User
from utilities.filters import (
ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, MultiValueWWNFilter,
NumericArrayFilter, TreeNodeMultipleChoiceFilter, EmptyStringMultipleChoiceFilter,
NumericArrayFilter, TreeNodeMultipleChoiceFilter, NullableMultipleChoiceFilter,
)
from virtualization.models import Cluster, ClusterGroup
from vpn.models import L2VPN
@ -1980,7 +1980,7 @@ class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
method='_unterminated',
label=_('Unterminated'),
)
type = EmptyStringMultipleChoiceFilter(
type = NullableMultipleChoiceFilter(
choices=CableTypeChoices
)
status = django_filters.MultipleChoiceFilter(

View File

@ -143,6 +143,14 @@ class NullableCharFieldFilter(django_filters.CharFilter):
return qs.distinct() if self.distinct else qs
class NullableMultipleChoiceFilter(django_filters.MultipleChoiceFilter):
def filter(self, qs, value):
if settings.FILTERS_NULL_CHOICE_VALUE in value:
value.append('')
return super().filter(qs, value)
class NumericArrayFilter(django_filters.NumberFilter):
"""
Filter based on the presence of an integer within an ArrayField.
@ -171,12 +179,3 @@ class ContentTypeFilter(django_filters.CharFilter):
f'{self.field_name}__model': model
}
)
class EmptyStringMultipleChoiceFilter(django_filters.MultipleChoiceFilter):
empty_value = 'EMPTY'
def filter(self, qs, value):
if self.empty_value in value:
value.append('')
return super().filter(qs, value)