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 django.utils.translation import gettext_lazy as _
from utilities.choices import ChoiceSet from utilities.choices import ChoiceSet
@ -1482,7 +1483,7 @@ class CableTypeChoices(ChoiceSet):
TYPE_AOC = 'aoc' TYPE_AOC = 'aoc'
TYPE_POWER = 'power' TYPE_POWER = 'power'
TYPE_USB = 'usb' TYPE_USB = 'usb'
TYPE_EMPTY = 'EMPTY' TYPE_EMPTY = settings.FILTERS_NULL_CHOICE_VALUE
CHOICES = ( CHOICES = (
( (
@ -1519,7 +1520,7 @@ class CableTypeChoices(ChoiceSet):
_('Other'), ( _('Other'), (
(TYPE_USB, _('USB')), (TYPE_USB, _('USB')),
(TYPE_POWER, _('Power')), (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 users.models import User
from utilities.filters import ( from utilities.filters import (
ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, MultiValueWWNFilter, ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, MultiValueWWNFilter,
NumericArrayFilter, TreeNodeMultipleChoiceFilter, EmptyStringMultipleChoiceFilter, NumericArrayFilter, TreeNodeMultipleChoiceFilter, NullableMultipleChoiceFilter,
) )
from virtualization.models import Cluster, ClusterGroup from virtualization.models import Cluster, ClusterGroup
from vpn.models import L2VPN from vpn.models import L2VPN
@ -1980,7 +1980,7 @@ class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
method='_unterminated', method='_unterminated',
label=_('Unterminated'), label=_('Unterminated'),
) )
type = EmptyStringMultipleChoiceFilter( type = NullableMultipleChoiceFilter(
choices=CableTypeChoices choices=CableTypeChoices
) )
status = django_filters.MultipleChoiceFilter( status = django_filters.MultipleChoiceFilter(

View File

@ -143,6 +143,14 @@ class NullableCharFieldFilter(django_filters.CharFilter):
return qs.distinct() if self.distinct else qs 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): class NumericArrayFilter(django_filters.NumberFilter):
""" """
Filter based on the presence of an integer within an ArrayField. 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 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)