Просмотр исходного кода

Move TagFilter to PrimaryFilterSet

jeremystretch 4 лет назад
Родитель
Сommit
acc9ca7d7d

+ 0 - 5
netbox/circuits/filtersets.py

@@ -3,7 +3,6 @@ from django.db.models import Q
 
 from dcim.filtersets import CableTerminationFilterSet
 from dcim.models import Region, Site, SiteGroup
-from extras.filters import TagFilter
 from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet
 from tenancy.filtersets import TenancyFilterSet
 from utilities.filters import TreeNodeMultipleChoiceFilter
@@ -61,7 +60,6 @@ class ProviderFilterSet(PrimaryModelFilterSet):
         to_field_name='slug',
         label='Site (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Provider
@@ -94,7 +92,6 @@ class ProviderNetworkFilterSet(PrimaryModelFilterSet):
         to_field_name='slug',
         label='Provider (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = ProviderNetwork
@@ -112,7 +109,6 @@ class ProviderNetworkFilterSet(PrimaryModelFilterSet):
 
 
 class CircuitTypeFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = CircuitType
@@ -190,7 +186,6 @@ class CircuitFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         to_field_name='slug',
         label='Site (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Circuit

+ 0 - 22
netbox/dcim/filtersets.py

@@ -1,7 +1,6 @@
 import django_filters
 from django.contrib.auth.models import User
 
-from extras.filters import TagFilter
 from extras.filtersets import LocalConfigContextFilterSet
 from ipam.models import ASN, VRF
 from netbox.filtersets import (
@@ -79,7 +78,6 @@ class RegionFilterSet(OrganizationalModelFilterSet):
         to_field_name='slug',
         label='Parent region (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Region
@@ -97,7 +95,6 @@ class SiteGroupFilterSet(OrganizationalModelFilterSet):
         to_field_name='slug',
         label='Parent site group (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = SiteGroup
@@ -148,7 +145,6 @@ class SiteFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         queryset=ASN.objects.all(),
         label='AS (ID)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Site
@@ -225,7 +221,6 @@ class LocationFilterSet(TenancyFilterSet, OrganizationalModelFilterSet):
         to_field_name='slug',
         label='Location (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Location
@@ -241,7 +236,6 @@ class LocationFilterSet(TenancyFilterSet, OrganizationalModelFilterSet):
 
 
 class RackRoleFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = RackRole
@@ -325,7 +319,6 @@ class RackFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
     serial = django_filters.CharFilter(
         lookup_expr='iexact'
     )
-    tag = TagFilter()
 
     class Meta:
         model = Rack
@@ -389,7 +382,6 @@ class RackReservationFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         to_field_name='username',
         label='User (name)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = RackReservation
@@ -407,7 +399,6 @@ class RackReservationFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
 
 
 class ManufacturerFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = Manufacturer
@@ -461,7 +452,6 @@ class DeviceTypeFilterSet(PrimaryModelFilterSet):
         method='_device_bays',
         label='Has device bays',
     )
-    tag = TagFilter()
 
     class Meta:
         model = DeviceType
@@ -546,7 +536,6 @@ class ModuleTypeFilterSet(PrimaryModelFilterSet):
         method='_pass_through_ports',
         label='Has pass-through ports',
     )
-    tag = TagFilter()
 
     class Meta:
         model = ModuleType
@@ -732,7 +721,6 @@ class InventoryItemTemplateFilterSet(ChangeLoggedModelFilterSet, DeviceTypeCompo
 
 
 class DeviceRoleFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = DeviceRole
@@ -751,7 +739,6 @@ class PlatformFilterSet(OrganizationalModelFilterSet):
         to_field_name='slug',
         label='Manufacturer (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Platform
@@ -916,7 +903,6 @@ class DeviceFilterSet(PrimaryModelFilterSet, TenancyFilterSet, LocalConfigContex
         method='_device_bays',
         label='Has device bays',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Device
@@ -990,7 +976,6 @@ class ModuleFilterSet(PrimaryModelFilterSet):
         queryset=Device.objects.all(),
         label='Device (ID)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Module
@@ -1080,7 +1065,6 @@ class DeviceComponentFilterSet(django_filters.FilterSet):
         to_field_name='name',
         label='Virtual Chassis',
     )
-    tag = TagFilter()
 
     def search(self, queryset, name, value):
         if not value.strip():
@@ -1202,7 +1186,6 @@ class InterfaceFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet, CableT
     )
     mac_address = MultiValueMACAddressFilter()
     wwn = MultiValueWWNFilter()
-    tag = TagFilter()
     vlan_id = django_filters.CharFilter(
         method='filter_vlan_id',
         label='Assigned VLAN'
@@ -1377,7 +1360,6 @@ class InventoryItemFilterSet(PrimaryModelFilterSet, DeviceComponentFilterSet):
 
 
 class InventoryItemRoleFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = InventoryItemRole
@@ -1447,7 +1429,6 @@ class VirtualChassisFilterSet(PrimaryModelFilterSet):
         to_field_name='slug',
         label='Tenant (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = VirtualChassis
@@ -1505,7 +1486,6 @@ class CableFilterSet(TenancyFilterSet, PrimaryModelFilterSet):
         method='filter_device',
         field_name='device__site__slug'
     )
-    tag = TagFilter()
 
     class Meta:
         model = Cable
@@ -1571,7 +1551,6 @@ class PowerPanelFilterSet(PrimaryModelFilterSet):
         lookup_expr='in',
         label='Location (ID)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = PowerPanel
@@ -1641,7 +1620,6 @@ class PowerFeedFilterSet(PrimaryModelFilterSet, CableTerminationFilterSet, PathE
         choices=PowerFeedStatusChoices,
         null_value=None
     )
-    tag = TagFilter()
 
     class Meta:
         model = PowerFeed

+ 0 - 14
netbox/ipam/filtersets.py

@@ -6,7 +6,6 @@ from django.db.models import Q
 from netaddr.core import AddrFormatError
 
 from dcim.models import Device, Interface, Region, Site, SiteGroup
-from extras.filters import TagFilter
 from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet
 from tenancy.filtersets import TenancyFilterSet
 from utilities.filters import (
@@ -63,7 +62,6 @@ class VRFFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         to_field_name='name',
         label='Export target (name)',
     )
-    tag = TagFilter()
 
     def search(self, queryset, name, value):
         if not value.strip():
@@ -106,7 +104,6 @@ class RouteTargetFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         to_field_name='rd',
         label='Export VRF (RD)',
     )
-    tag = TagFilter()
 
     def search(self, queryset, name, value):
         if not value.strip():
@@ -122,7 +119,6 @@ class RouteTargetFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
 
 
 class RIRFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = RIR
@@ -152,7 +148,6 @@ class AggregateFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         to_field_name='slug',
         label='RIR (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Aggregate
@@ -218,7 +213,6 @@ class RoleFilterSet(OrganizationalModelFilterSet):
         method='search',
         label='Search',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Role
@@ -347,7 +341,6 @@ class PrefixFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         choices=PrefixStatusChoices,
         null_value=None
     )
-    tag = TagFilter()
 
     class Meta:
         model = Prefix
@@ -453,7 +446,6 @@ class IPRangeFilterSet(TenancyFilterSet, PrimaryModelFilterSet):
         choices=IPRangeStatusChoices,
         null_value=None
     )
-    tag = TagFilter()
 
     class Meta:
         model = IPRange
@@ -578,7 +570,6 @@ class IPAddressFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
     role = django_filters.MultipleChoiceFilter(
         choices=IPAddressRoleChoices
     )
-    tag = TagFilter()
 
     class Meta:
         model = IPAddress
@@ -664,7 +655,6 @@ class FHRPGroupFilterSet(PrimaryModelFilterSet):
         queryset=IPAddress.objects.all(),
         method='filter_related_ip'
     )
-    tag = TagFilter()
 
     class Meta:
         model = FHRPGroup
@@ -737,7 +727,6 @@ class VLANGroupFilterSet(OrganizationalModelFilterSet):
     cluster = django_filters.NumberFilter(
         method='filter_scope'
     )
-    tag = TagFilter()
 
     class Meta:
         model = VLANGroup
@@ -832,7 +821,6 @@ class VLANFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         queryset=VirtualMachine.objects.all(),
         method='get_for_virtualmachine'
     )
-    tag = TagFilter()
 
     class Meta:
         model = VLAN
@@ -864,7 +852,6 @@ class ServiceTemplateFilterSet(PrimaryModelFilterSet):
         field_name='ports',
         lookup_expr='contains'
     )
-    tag = TagFilter()
 
     class Meta:
         model = ServiceTemplate
@@ -906,7 +893,6 @@ class ServiceFilterSet(PrimaryModelFilterSet):
         field_name='ports',
         lookup_expr='contains'
     )
-    tag = TagFilter()
 
     class Meta:
         model = Service

+ 5 - 0
netbox/netbox/filtersets.py

@@ -120,6 +120,10 @@ class BaseFilterSet(django_filters.FilterSet):
     def get_additional_lookups(cls, existing_filter_name, existing_filter):
         new_filters = {}
 
+        # Skip on abstract models
+        if not cls._meta.model:
+            return {}
+
         # Skip nonstandard lookup expressions
         if existing_filter.method is not None or existing_filter.lookup_expr not in ['exact', 'in']:
             return {}
@@ -214,6 +218,7 @@ class ChangeLoggedModelFilterSet(BaseFilterSet):
 
 
 class PrimaryModelFilterSet(ChangeLoggedModelFilterSet):
+    tag = TagFilter()
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)

+ 0 - 6
netbox/tenancy/filtersets.py

@@ -1,7 +1,6 @@
 import django_filters
 from django.db.models import Q
 
-from extras.filters import TagFilter
 from netbox.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet
 from utilities.filters import ContentTypeFilter, TreeNodeMultipleChoiceFilter
 from .models import *
@@ -33,7 +32,6 @@ class TenantGroupFilterSet(OrganizationalModelFilterSet):
         to_field_name='slug',
         label='Tenant group (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = TenantGroup
@@ -58,7 +56,6 @@ class TenantFilterSet(PrimaryModelFilterSet):
         to_field_name='slug',
         label='Tenant group (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Tenant
@@ -119,7 +116,6 @@ class ContactGroupFilterSet(OrganizationalModelFilterSet):
         to_field_name='slug',
         label='Contact group (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = ContactGroup
@@ -127,7 +123,6 @@ class ContactGroupFilterSet(OrganizationalModelFilterSet):
 
 
 class ContactRoleFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = ContactRole
@@ -152,7 +147,6 @@ class ContactFilterSet(PrimaryModelFilterSet):
         to_field_name='slug',
         label='Contact group (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Contact

+ 0 - 6
netbox/virtualization/filtersets.py

@@ -2,7 +2,6 @@ import django_filters
 from django.db.models import Q
 
 from dcim.models import DeviceRole, Platform, Region, Site, SiteGroup
-from extras.filters import TagFilter
 from extras.filtersets import LocalConfigContextFilterSet
 from netbox.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from tenancy.filtersets import TenancyFilterSet
@@ -20,7 +19,6 @@ __all__ = (
 
 
 class ClusterTypeFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = ClusterType
@@ -28,7 +26,6 @@ class ClusterTypeFilterSet(OrganizationalModelFilterSet):
 
 
 class ClusterGroupFilterSet(OrganizationalModelFilterSet):
-    tag = TagFilter()
 
     class Meta:
         model = ClusterGroup
@@ -96,7 +93,6 @@ class ClusterFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
         to_field_name='slug',
         label='Cluster type (slug)',
     )
-    tag = TagFilter()
 
     class Meta:
         model = Cluster
@@ -217,7 +213,6 @@ class VirtualMachineFilterSet(PrimaryModelFilterSet, TenancyFilterSet, LocalConf
         method='_has_primary_ip',
         label='Has a primary IP',
     )
-    tag = TagFilter()
 
     class Meta:
         model = VirtualMachine
@@ -278,7 +273,6 @@ class VMInterfaceFilterSet(PrimaryModelFilterSet):
     mac_address = MultiValueMACAddressFilter(
         label='MAC address',
     )
-    tag = TagFilter()
 
     class Meta:
         model = VMInterface

+ 0 - 4
netbox/wireless/filtersets.py

@@ -2,7 +2,6 @@ import django_filters
 from django.db.models import Q
 
 from dcim.choices import LinkStatusChoices
-from extras.filters import TagFilter
 from ipam.models import VLAN
 from netbox.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
 from utilities.filters import MultiValueNumberFilter, TreeNodeMultipleChoiceFilter
@@ -25,7 +24,6 @@ class WirelessLANGroupFilterSet(OrganizationalModelFilterSet):
         queryset=WirelessLANGroup.objects.all(),
         to_field_name='slug'
     )
-    tag = TagFilter()
 
     class Meta:
         model = WirelessLANGroup
@@ -57,7 +55,6 @@ class WirelessLANFilterSet(PrimaryModelFilterSet):
     auth_cipher = django_filters.MultipleChoiceFilter(
         choices=WirelessAuthCipherChoices
     )
-    tag = TagFilter()
 
     class Meta:
         model = WirelessLAN
@@ -89,7 +86,6 @@ class WirelessLinkFilterSet(PrimaryModelFilterSet):
     auth_cipher = django_filters.MultipleChoiceFilter(
         choices=WirelessAuthCipherChoices
     )
-    tag = TagFilter()
 
     class Meta:
         model = WirelessLink