From acfaa8cf4b4281a0718caf81adf466170b985806 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 13 Oct 2023 08:55:08 -0700 Subject: [PATCH] 10769 change to termianted --- netbox/dcim/filtersets.py | 24 ++++++++---------------- netbox/dcim/forms/filtersets.py | 13 +++---------- 2 files changed, 11 insertions(+), 26 deletions(-) diff --git a/netbox/dcim/filtersets.py b/netbox/dcim/filtersets.py index de27efb23..d6f08e768 100644 --- a/netbox/dcim/filtersets.py +++ b/netbox/dcim/filtersets.py @@ -1,5 +1,6 @@ import django_filters from django.contrib.auth import get_user_model +from django.db.models import Q from django.utils.translation import gettext as _ from extras.filtersets import LocalConfigContextFilterSet @@ -1745,13 +1746,9 @@ class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet): method='filter_by_cable_end_b', field_name='terminations__termination_id' ) - has_a_terminations = django_filters.BooleanFilter( - method='_has_a_terminations', - label=_('Has a terminations'), - ) - has_b_terminations = django_filters.BooleanFilter( - method='_has_b_terminations', - label=_('Has b terminations'), + unterminated = django_filters.BooleanFilter( + method='_unterminated', + label=_('Unterminated'), ) type = django_filters.MultipleChoiceFilter( choices=CableTypeChoices @@ -1820,17 +1817,12 @@ class CableFilterSet(TenancyFilterSet, NetBoxModelFilterSet): # Filter by termination id and cable_end type return self.filter_by_cable_end(queryset, name, value, CableEndChoices.SIDE_B) - def _has_a_terminations(self, queryset, name, value): + def _unterminated(self, queryset, name, value): if value: - return queryset.filter(terminations__cable_end=CableEndChoices.SIDE_A) + terminated_ids = queryset.filter(terminations__cable_end=CableEndChoices.SIDE_A).filter(terminations__cable_end=CableEndChoices.SIDE_B).values("id") + return queryset.exclude(id__in=terminated_ids) else: - return queryset.exclude(terminations__cable_end=CableEndChoices.SIDE_A) - - def _has_b_terminations(self, queryset, name, value): - if value: - return queryset.filter(terminations__cable_end=CableEndChoices.SIDE_B) - else: - return queryset.exclude(terminations__cable_end=CableEndChoices.SIDE_B) + return queryset.filter(terminations__cable_end=CableEndChoices.SIDE_A).filter(terminations__cable_end=CableEndChoices.SIDE_B) class CableTerminationFilterSet(BaseFilterSet): diff --git a/netbox/dcim/forms/filtersets.py b/netbox/dcim/forms/filtersets.py index 0731ae7a3..3ba5ebd63 100644 --- a/netbox/dcim/forms/filtersets.py +++ b/netbox/dcim/forms/filtersets.py @@ -908,7 +908,7 @@ class VirtualChassisFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): class CableFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): model = Cable fieldsets = ( - (None, ('q', 'filter_id', 'has_a_terminations', 'has_b_terminations', 'tag')), + (None, ('q', 'filter_id', 'unterminated', 'tag')), (_('Location'), ('site_id', 'location_id', 'rack_id', 'device_id')), (_('Attributes'), ('type', 'status', 'color', 'length', 'length_unit')), (_('Tenant'), ('tenant_group_id', 'tenant_id')), @@ -979,15 +979,8 @@ class CableFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): choices=add_blank_choice(CableLengthUnitChoices), required=False ) - has_a_terminations = forms.NullBooleanField( - label=_('Has a terminations'), - required=False, - widget=forms.Select( - choices=BOOLEAN_WITH_BLANK_CHOICES - ) - ) - has_b_terminations = forms.NullBooleanField( - label=_('Has b terminations'), + unterminated = forms.NullBooleanField( + label=_('Unterminated'), required=False, widget=forms.Select( choices=BOOLEAN_WITH_BLANK_CHOICES