mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-19 17:59:11 -06:00
Add EmptyStringFilter and type__empty filter on CableFilterSet
This commit is contained in:
parent
7ac6dff96d
commit
2c9eeb8d21
@ -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,
|
NumericArrayFilter, TreeNodeMultipleChoiceFilter, EmptyStringFilter,
|
||||||
)
|
)
|
||||||
from virtualization.models import Cluster, ClusterGroup
|
from virtualization.models import Cluster, ClusterGroup
|
||||||
from vpn.models import L2VPN
|
from vpn.models import L2VPN
|
||||||
@ -1983,6 +1983,9 @@ class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
|||||||
type = django_filters.MultipleChoiceFilter(
|
type = django_filters.MultipleChoiceFilter(
|
||||||
choices=CableTypeChoices
|
choices=CableTypeChoices
|
||||||
)
|
)
|
||||||
|
type__empty = EmptyStringFilter(
|
||||||
|
field_name='type'
|
||||||
|
)
|
||||||
status = django_filters.MultipleChoiceFilter(
|
status = django_filters.MultipleChoiceFilter(
|
||||||
choices=LinkStatusChoices
|
choices=LinkStatusChoices
|
||||||
)
|
)
|
||||||
|
@ -5245,6 +5245,12 @@ class CableTestCase(TestCase, ChangeLoggedFilterSetTests):
|
|||||||
params = {'type__empty': 'false'}
|
params = {'type__empty': 'false'}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
|
||||||
|
|
||||||
|
def test_type_empty(self):
|
||||||
|
params = {'type__empty': 'true'}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 8)
|
||||||
|
params = {'type__empty': 'false'}
|
||||||
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
|
||||||
|
|
||||||
def test_status(self):
|
def test_status(self):
|
||||||
params = {'status': [LinkStatusChoices.STATUS_CONNECTED]}
|
params = {'status': [LinkStatusChoices.STATUS_CONNECTED]}
|
||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 11)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 11)
|
||||||
|
@ -171,3 +171,14 @@ class ContentTypeFilter(django_filters.CharFilter):
|
|||||||
f'{self.field_name}__model': model
|
f'{self.field_name}__model': model
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class EmptyStringFilter(django_filters.BooleanFilter):
|
||||||
|
def filter(self, qs, value):
|
||||||
|
if value in EMPTY_VALUES:
|
||||||
|
return qs
|
||||||
|
|
||||||
|
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