Closes #3259: Add rack and site filters for cables

This commit is contained in:
Jeremy Stretch 2019-09-27 12:18:53 -04:00
parent d2ab41abfb
commit 4889c8ff9b
2 changed files with 53 additions and 30 deletions

View File

@ -1,3 +1,11 @@
v2.6.6 (FUTURE)
## Enhancements
* [#3259](https://github.com/netbox-community/netbox/issues/3259) - Add `rack` and `site` filters for cables
---
v2.6.5 (2019-09-25)
## Enhancements
@ -20,6 +28,8 @@ v2.6.5 (2019-09-25)
* [#3540](https://github.com/netbox-community/netbox/issues/3540) - Fixed virtual machine interface edit with new inline vlan edit fields
* [#3543](https://github.com/netbox-community/netbox/issues/3543) - Added inline VLAN editing to virtual machine interfaces
---
v2.6.4 (2019-09-19)
## Enhancements
@ -39,6 +49,8 @@ v2.6.4 (2019-09-19)
* [#3513](https://github.com/netbox-community/netbox/issues/3513) - Fix assignment of tags when creating front/rear ports
* [#3514](https://github.com/netbox-community/netbox/issues/3514) - Label TextVar fields when rendering custom script forms
---
v2.6.3 (2019-09-04)
## New Features

View File

@ -1,6 +1,5 @@
import django_filters
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Q
from extras.filters import CustomFieldFilterSet, LocalConfigContextFilter
@ -931,13 +930,28 @@ class CableFilter(django_filters.FilterSet):
color = django_filters.MultipleChoiceFilter(
choices=COLOR_CHOICES
)
device = django_filters.CharFilter(
method='filter_connected_device',
field_name='name'
device_id = MultiValueNumberFilter(
method='filter_device'
)
device_id = django_filters.CharFilter(
method='filter_connected_device',
field_name='pk'
device = MultiValueNumberFilter(
method='filter_device',
field_name='device__name'
)
rack_id = MultiValueNumberFilter(
method='filter_device',
field_name='device__rack_id'
)
rack = MultiValueNumberFilter(
method='filter_device',
field_name='device__rack__name'
)
site_id = MultiValueNumberFilter(
method='filter_device',
field_name='device__site_id'
)
site = MultiValueNumberFilter(
method='filter_device',
field_name='device__site__name'
)
class Meta:
@ -949,15 +963,12 @@ class CableFilter(django_filters.FilterSet):
return queryset
return queryset.filter(label__icontains=value)
def filter_connected_device(self, queryset, name, value):
if not value.strip():
def filter_device(self, queryset, name, value):
queryset = queryset.filter(
Q(**{'_termination_a_{}__in'.format(name): value}) |
Q(**{'_termination_b_{}__in'.format(name): value})
)
return queryset
try:
device = Device.objects.get(**{name: value})
except ObjectDoesNotExist:
return queryset.none()
cable_pks = device.get_cables(pk_list=True)
return queryset.filter(pk__in=cable_pks)
class ConsoleConnectionFilter(django_filters.FilterSet):