From 3262262a8a2d4a15f9f096b155bb07699290ad8c Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Tue, 6 Dec 2016 14:45:01 -0500 Subject: [PATCH] Closes #663: Added MAC address search field to device list --- netbox/dcim/filters.py | 11 +++++++++++ netbox/dcim/forms.py | 1 + 2 files changed, 12 insertions(+) diff --git a/netbox/dcim/filters.py b/netbox/dcim/filters.py index 65831a974..69bccd253 100644 --- a/netbox/dcim/filters.py +++ b/netbox/dcim/filters.py @@ -1,4 +1,5 @@ import django_filters +from netaddr.core import AddrFormatError from django.db.models import Q @@ -146,6 +147,10 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): action='search', label='Search', ) + mac_address = django_filters.MethodFilter( + action='_mac_address', + label='MAC address', + ) site_id = django_filters.ModelMultipleChoiceFilter( name='rack__site', queryset=Site.objects.all(), @@ -254,6 +259,12 @@ class DeviceFilter(CustomFieldFilterSet, django_filters.FilterSet): Q(comments__icontains=value) ).distinct() + def _mac_address(self, queryset, value): + try: + return queryset.filter(interfaces__mac_address=value.strip()).distinct() + except AddrFormatError: + return queryset.none() + class ConsolePortFilter(django_filters.FilterSet): device_id = django_filters.ModelMultipleChoiceFilter( diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index fcda14fb5..23da437a7 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -612,6 +612,7 @@ class DeviceFilterForm(BootstrapMixin, CustomFieldFilterForm): platform = FilterChoiceField(queryset=Platform.objects.annotate(filter_count=Count('devices')), to_field_name='slug', null_option=(0, 'None')) status = forms.NullBooleanField(required=False, widget=forms.Select(choices=FORM_STATUS_CHOICES)) + mac_address = forms.CharField(label='MAC address') #