mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-19 17:59:11 -06:00
Change to EmptyStringMultipleChoiceFilter
This commit is contained in:
parent
2c9eeb8d21
commit
05ee5a5145
@ -1482,6 +1482,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'
|
||||||
|
|
||||||
CHOICES = (
|
CHOICES = (
|
||||||
(
|
(
|
||||||
@ -1514,8 +1515,13 @@ class CableTypeChoices(ChoiceSet):
|
|||||||
(TYPE_AOC, 'Active Optical Cabling (AOC)'),
|
(TYPE_AOC, 'Active Optical Cabling (AOC)'),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
_('Other'), (
|
||||||
(TYPE_USB, _('USB')),
|
(TYPE_USB, _('USB')),
|
||||||
(TYPE_POWER, _('Power')),
|
(TYPE_POWER, _('Power')),
|
||||||
|
(TYPE_EMPTY, _('(unset)')),
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -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, EmptyStringFilter,
|
NumericArrayFilter, TreeNodeMultipleChoiceFilter, EmptyStringMultipleChoiceFilter,
|
||||||
)
|
)
|
||||||
from virtualization.models import Cluster, ClusterGroup
|
from virtualization.models import Cluster, ClusterGroup
|
||||||
from vpn.models import L2VPN
|
from vpn.models import L2VPN
|
||||||
@ -1980,12 +1980,9 @@ class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
|||||||
method='_unterminated',
|
method='_unterminated',
|
||||||
label=_('Unterminated'),
|
label=_('Unterminated'),
|
||||||
)
|
)
|
||||||
type = django_filters.MultipleChoiceFilter(
|
type = EmptyStringMultipleChoiceFilter(
|
||||||
choices=CableTypeChoices
|
choices=CableTypeChoices
|
||||||
)
|
)
|
||||||
type__empty = EmptyStringFilter(
|
|
||||||
field_name='type'
|
|
||||||
)
|
|
||||||
status = django_filters.MultipleChoiceFilter(
|
status = django_filters.MultipleChoiceFilter(
|
||||||
choices=LinkStatusChoices
|
choices=LinkStatusChoices
|
||||||
)
|
)
|
||||||
|
@ -5240,6 +5240,7 @@ class CableTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
def test_type(self):
|
def test_type(self):
|
||||||
params = {'type': [CableTypeChoices.TYPE_CAT3, CableTypeChoices.TYPE_CAT5E]}
|
params = {'type': [CableTypeChoices.TYPE_CAT3, CableTypeChoices.TYPE_CAT5E]}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
|
||||||
|
params = {'type': [CableTypeChoices.TYPE_EMPTY]}
|
||||||
params = {'type__empty': 'true'}
|
params = {'type__empty': 'true'}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8)
|
||||||
params = {'type__empty': 'false'}
|
params = {'type__empty': 'false'}
|
||||||
@ -5248,8 +5249,8 @@ class CableTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
def test_type_empty(self):
|
def test_type_empty(self):
|
||||||
params = {'type__empty': 'true'}
|
params = {'type__empty': 'true'}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8)
|
||||||
params = {'type__empty': 'false'}
|
params = {'type': [CableTypeChoices.TYPE_EMPTY, CableTypeChoices.TYPE_CAT3]}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 10)
|
||||||
|
|
||||||
def test_status(self):
|
def test_status(self):
|
||||||
params = {'status': [LinkStatusChoices.STATUS_CONNECTED]}
|
params = {'status': [LinkStatusChoices.STATUS_CONNECTED]}
|
||||||
|
@ -173,12 +173,10 @@ class ContentTypeFilter(django_filters.CharFilter):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class EmptyStringFilter(django_filters.BooleanFilter):
|
class EmptyStringMultipleChoiceFilter(django_filters.MultipleChoiceFilter):
|
||||||
|
empty_value = 'EMPTY'
|
||||||
|
|
||||||
def filter(self, qs, value):
|
def filter(self, qs, value):
|
||||||
if value in EMPTY_VALUES:
|
if self.empty_value in value:
|
||||||
return qs
|
value.append('')
|
||||||
|
return super().filter(qs, value)
|
||||||
exclude = self.exclude ^ (value is False)
|
|
||||||
method = qs.exclude if exclude else qs.filter
|
|
||||||
|
|
||||||
return method(**{self.field_name: ""})
|
|
||||||
|
Loading…
Reference in New Issue
Block a user