mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-21 19:47:20 -06:00
Fixes #7460: Fix filtering connections by site ID
This commit is contained in:
parent
c0010ec100
commit
3ab5682e7a
@ -8,6 +8,7 @@
|
|||||||
* [#7446](https://github.com/netbox-community/netbox/issues/7446) - Fix exception when viewing a large number of child IPs within a prefix
|
* [#7446](https://github.com/netbox-community/netbox/issues/7446) - Fix exception when viewing a large number of child IPs within a prefix
|
||||||
* [#7455](https://github.com/netbox-community/netbox/issues/7455) - Fix site/provider network validation for circuit termination API serializer
|
* [#7455](https://github.com/netbox-community/netbox/issues/7455) - Fix site/provider network validation for circuit termination API serializer
|
||||||
* [#7459](https://github.com/netbox-community/netbox/issues/7459) - Pre-populate location data when adding a device to a rack
|
* [#7459](https://github.com/netbox-community/netbox/issues/7459) - Pre-populate location data when adding a device to a rack
|
||||||
|
* [#7460](https://github.com/netbox-community/netbox/issues/7460) - Fix filtering connections by site ID
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@ from .choices import *
|
|||||||
from .constants import *
|
from .constants import *
|
||||||
from .models import *
|
from .models import *
|
||||||
|
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'CableFilterSet',
|
'CableFilterSet',
|
||||||
'CableTerminationFilterSet',
|
'CableTerminationFilterSet',
|
||||||
@ -1243,73 +1242,6 @@ class CableFilterSet(PrimaryModelFilterSet):
|
|||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class ConnectionFilterSet(BaseFilterSet):
|
|
||||||
|
|
||||||
def filter_site(self, queryset, name, value):
|
|
||||||
if not value.strip():
|
|
||||||
return queryset
|
|
||||||
return queryset.filter(device__site__slug=value)
|
|
||||||
|
|
||||||
def filter_device(self, queryset, name, value):
|
|
||||||
if not value:
|
|
||||||
return queryset
|
|
||||||
return queryset.filter(**{f'{name}__in': value})
|
|
||||||
|
|
||||||
|
|
||||||
class ConsoleConnectionFilterSet(ConnectionFilterSet):
|
|
||||||
site = django_filters.CharFilter(
|
|
||||||
method='filter_site',
|
|
||||||
label='Site (slug)',
|
|
||||||
)
|
|
||||||
device_id = MultiValueNumberFilter(
|
|
||||||
method='filter_device'
|
|
||||||
)
|
|
||||||
device = MultiValueCharFilter(
|
|
||||||
method='filter_device',
|
|
||||||
field_name='device__name'
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = ConsolePort
|
|
||||||
fields = ['name']
|
|
||||||
|
|
||||||
|
|
||||||
class PowerConnectionFilterSet(ConnectionFilterSet):
|
|
||||||
site = django_filters.CharFilter(
|
|
||||||
method='filter_site',
|
|
||||||
label='Site (slug)',
|
|
||||||
)
|
|
||||||
device_id = MultiValueNumberFilter(
|
|
||||||
method='filter_device'
|
|
||||||
)
|
|
||||||
device = MultiValueCharFilter(
|
|
||||||
method='filter_device',
|
|
||||||
field_name='device__name'
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = PowerPort
|
|
||||||
fields = ['name']
|
|
||||||
|
|
||||||
|
|
||||||
class InterfaceConnectionFilterSet(ConnectionFilterSet):
|
|
||||||
site = django_filters.CharFilter(
|
|
||||||
method='filter_site',
|
|
||||||
label='Site (slug)',
|
|
||||||
)
|
|
||||||
device_id = MultiValueNumberFilter(
|
|
||||||
method='filter_device'
|
|
||||||
)
|
|
||||||
device = MultiValueCharFilter(
|
|
||||||
method='filter_device',
|
|
||||||
field_name='device__name'
|
|
||||||
)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
model = Interface
|
|
||||||
fields = []
|
|
||||||
|
|
||||||
|
|
||||||
class PowerPanelFilterSet(PrimaryModelFilterSet):
|
class PowerPanelFilterSet(PrimaryModelFilterSet):
|
||||||
q = django_filters.CharFilter(
|
q = django_filters.CharFilter(
|
||||||
method='search',
|
method='search',
|
||||||
@ -1441,3 +1373,52 @@ class PowerFeedFilterSet(PrimaryModelFilterSet, CableTerminationFilterSet, PathE
|
|||||||
Q(comments__icontains=value)
|
Q(comments__icontains=value)
|
||||||
)
|
)
|
||||||
return queryset.filter(qs_filter)
|
return queryset.filter(qs_filter)
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Connection filter sets
|
||||||
|
#
|
||||||
|
|
||||||
|
class ConnectionFilterSet(BaseFilterSet):
|
||||||
|
site_id = MultiValueNumberFilter(
|
||||||
|
method='filter_connections',
|
||||||
|
field_name='device__site_id'
|
||||||
|
)
|
||||||
|
site = MultiValueCharFilter(
|
||||||
|
method='filter_connections',
|
||||||
|
field_name='device__site__slug'
|
||||||
|
)
|
||||||
|
device_id = MultiValueNumberFilter(
|
||||||
|
method='filter_connections',
|
||||||
|
field_name='device_id'
|
||||||
|
)
|
||||||
|
device = MultiValueCharFilter(
|
||||||
|
method='filter_connections',
|
||||||
|
field_name='device__name'
|
||||||
|
)
|
||||||
|
|
||||||
|
def filter_connections(self, queryset, name, value):
|
||||||
|
if not value:
|
||||||
|
return queryset
|
||||||
|
return queryset.filter(**{f'{name}__in': value})
|
||||||
|
|
||||||
|
|
||||||
|
class ConsoleConnectionFilterSet(ConnectionFilterSet):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = ConsolePort
|
||||||
|
fields = ['name']
|
||||||
|
|
||||||
|
|
||||||
|
class PowerConnectionFilterSet(ConnectionFilterSet):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = PowerPort
|
||||||
|
fields = ['name']
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceConnectionFilterSet(ConnectionFilterSet):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Interface
|
||||||
|
fields = []
|
||||||
|
Loading…
Reference in New Issue
Block a user