|
|
@@ -14,16 +14,16 @@ from netbox.filtersets import (
|
|
|
AttributeFiltersMixin, BaseFilterSet, ChangeLoggedModelFilterSet, NestedGroupModelFilterSet, NetBoxModelFilterSet,
|
|
|
OrganizationalModelFilterSet,
|
|
|
)
|
|
|
-from tenancy.filtersets import TenancyFilterSet, ContactModelFilterSet
|
|
|
+from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet
|
|
|
from tenancy.models import *
|
|
|
from users.models import User
|
|
|
from utilities.filters import (
|
|
|
ContentTypeFilter, MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, MultiValueWWNFilter,
|
|
|
NumericArrayFilter, TreeNodeMultipleChoiceFilter,
|
|
|
)
|
|
|
-from virtualization.models import Cluster, ClusterGroup, VMInterface, VirtualMachine
|
|
|
+from virtualization.models import Cluster, ClusterGroup, VirtualMachine, VMInterface
|
|
|
from vpn.models import L2VPN
|
|
|
-from wireless.choices import WirelessRoleChoices, WirelessChannelChoices
|
|
|
+from wireless.choices import WirelessChannelChoices, WirelessRoleChoices
|
|
|
from wireless.models import WirelessLAN, WirelessLink
|
|
|
from .choices import *
|
|
|
from .constants import *
|
|
|
@@ -1807,6 +1807,14 @@ class MACAddressFilterSet(NetBoxModelFilterSet):
|
|
|
queryset=VMInterface.objects.all(),
|
|
|
label=_('VM interface (ID)'),
|
|
|
)
|
|
|
+ assigned = django_filters.BooleanFilter(
|
|
|
+ method='filter_assigned',
|
|
|
+ label=_('Is assigned'),
|
|
|
+ )
|
|
|
+ primary = django_filters.BooleanFilter(
|
|
|
+ method='filter_primary',
|
|
|
+ label=_('Is primary'),
|
|
|
+ )
|
|
|
|
|
|
class Meta:
|
|
|
model = MACAddress
|
|
|
@@ -1843,6 +1851,29 @@ class MACAddressFilterSet(NetBoxModelFilterSet):
|
|
|
vminterface__in=interface_ids
|
|
|
)
|
|
|
|
|
|
+ def filter_assigned(self, queryset, name, value):
|
|
|
+ params = {
|
|
|
+ 'assigned_object_type__isnull': True,
|
|
|
+ 'assigned_object_id__isnull': True,
|
|
|
+ }
|
|
|
+ if value:
|
|
|
+ return queryset.exclude(**params)
|
|
|
+ else:
|
|
|
+ return queryset.filter(**params)
|
|
|
+
|
|
|
+ def filter_primary(self, queryset, name, value):
|
|
|
+ interface_mac_ids = Interface.objects.filter(primary_mac_address_id__isnull=False).values_list(
|
|
|
+ 'primary_mac_address_id', flat=True
|
|
|
+ )
|
|
|
+ vminterface_mac_ids = VMInterface.objects.filter(primary_mac_address_id__isnull=False).values_list(
|
|
|
+ 'primary_mac_address_id', flat=True
|
|
|
+ )
|
|
|
+ query = Q(pk__in=interface_mac_ids) | Q(pk__in=vminterface_mac_ids)
|
|
|
+ if value:
|
|
|
+ return queryset.filter(query)
|
|
|
+ else:
|
|
|
+ return queryset.exclude(query)
|
|
|
+
|
|
|
|
|
|
class CommonInterfaceFilterSet(django_filters.FilterSet):
|
|
|
mode = django_filters.MultipleChoiceFilter(
|