Parcourir la source

Closes #663: Added MAC address search field to device list

Jeremy Stretch il y a 8 ans
Parent
commit
3262262a8a
2 fichiers modifiés avec 12 ajouts et 0 suppressions
  1. 11 0
      netbox/dcim/filters.py
  2. 1 0
      netbox/dcim/forms.py

+ 11 - 0
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(

+ 1 - 0
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')
 
 
 #