Move TagFilter to extras

This commit is contained in:
jeremystretch 2021-04-29 16:12:31 -04:00
parent c4e88fd11a
commit d35ac1347c
10 changed files with 31 additions and 26 deletions

View File

@ -3,8 +3,9 @@ from django.db.models import Q
from dcim.filters import CableTerminationFilterSet
from dcim.models import Region, Site, SiteGroup
from extras.filters import TagFilter
from tenancy.filters import TenancyFilterSet
from utilities.filters import TagFilter, TreeNodeMultipleChoiceFilter
from utilities.filters import TreeNodeMultipleChoiceFilter
from utilities.filtersets import ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet
from .choices import *
from .models import *

View File

@ -1,12 +1,13 @@
import django_filters
from django.contrib.auth.models import User
from extras.filters import TagFilter
from extras.filtersets import LocalConfigContextFilterSet
from tenancy.filters import TenancyFilterSet
from tenancy.models import Tenant
from utilities.choices import ColorChoices
from utilities.filters import (
MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, TagFilter, TreeNodeMultipleChoiceFilter,
MultiValueCharFilter, MultiValueMACAddressFilter, MultiValueNumberFilter, TreeNodeMultipleChoiceFilter,
)
from utilities.filtersets import (
BaseFilterSet, ChangeLoggedModelFilterSet, OrganizationalModelFilterSet, PrimaryModelFilterSet,

View File

@ -1,6 +1,7 @@
import django_filters
from django.forms import DateField, IntegerField, NullBooleanField
from .models import Tag
from .choices import *
__all__ = (
@ -36,3 +37,18 @@ class CustomFieldFilter(django_filters.Filter):
if custom_field.type not in EXACT_FILTER_TYPES:
if custom_field.filter_logic == CustomFieldFilterLogicChoices.FILTER_LOOSE:
self.lookup_expr = 'icontains'
class TagFilter(django_filters.ModelMultipleChoiceFilter):
"""
Match on one or more assigned tags. If multiple tags are specified (e.g. ?tag=foo&tag=bar), the queryset is filtered
to objects matching all tags.
"""
def __init__(self, *args, **kwargs):
kwargs.setdefault('field_name', 'tags__slug')
kwargs.setdefault('to_field_name', 'slug')
kwargs.setdefault('conjoined', True)
kwargs.setdefault('queryset', Tag.objects.all())
super().__init__(*args, **kwargs)

View File

@ -6,10 +6,10 @@ 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 tenancy.filters import TenancyFilterSet
from utilities.filters import (
ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, NumericArrayFilter, TagFilter,
TreeNodeMultipleChoiceFilter,
ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, NumericArrayFilter, TreeNodeMultipleChoiceFilter,
)
from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
from virtualization.models import VirtualMachine, VMInterface

View File

@ -2,7 +2,7 @@ import django_filters
from django.db.models import Q
from dcim.models import Device
from utilities.filters import TagFilter
from extras.filters import TagFilter
from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
from virtualization.models import VirtualMachine
from .models import Secret, SecretRole

View File

@ -1,7 +1,8 @@
import django_filters
from django.db.models import Q
from utilities.filters import TagFilter, TreeNodeMultipleChoiceFilter
from extras.filters import TagFilter
from utilities.filters import TreeNodeMultipleChoiceFilter
from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
from .models import Tenant, TenantGroup

View File

@ -4,7 +4,6 @@ from django.conf import settings
from django_filters.constants import EMPTY_VALUES
from dcim.forms import MACAddressField
from extras.models import Tag
def multivalue_field_factory(field_class):
@ -84,21 +83,6 @@ class NullableCharFieldFilter(django_filters.CharFilter):
return qs.distinct() if self.distinct else qs
class TagFilter(django_filters.ModelMultipleChoiceFilter):
"""
Match on one or more assigned tags. If multiple tags are specified (e.g. ?tag=foo&tag=bar), the queryset is filtered
to objects matching all tags.
"""
def __init__(self, *args, **kwargs):
kwargs.setdefault('field_name', 'tags__slug')
kwargs.setdefault('to_field_name', 'slug')
kwargs.setdefault('conjoined', True)
kwargs.setdefault('queryset', Tag.objects.all())
super().__init__(*args, **kwargs)
class NumericArrayFilter(django_filters.NumberFilter):
"""
Filter based on the presence of an integer within an ArrayField.

View File

@ -6,7 +6,7 @@ from django_filters.utils import get_model_field, resolve_field
from dcim.forms import MACAddressField
from extras.choices import CustomFieldFilterLogicChoices
from extras.filters import CustomFieldFilter
from extras.filters import CustomFieldFilter, TagFilter
from extras.models import CustomField
from utilities.constants import (
FILTER_CHAR_BASED_LOOKUP_MAP, FILTER_NEGATION_LOOKUP_MAP, FILTER_TREENODE_NEGATION_LOOKUP_MAP,
@ -100,7 +100,7 @@ class BaseFilterSet(django_filters.FilterSet):
elif isinstance(existing_filter, (
django_filters.ModelChoiceFilter,
django_filters.ModelMultipleChoiceFilter,
filters.TagFilter
TagFilter
)) or existing_filter.extra.get('choices'):
# These filter types support only negation
lookup_map = FILTER_NEGATION_LOOKUP_MAP

View File

@ -11,10 +11,11 @@ from dcim.filters import DeviceFilterSet, SiteFilterSet
from dcim.models import (
Device, DeviceRole, DeviceType, Interface, Manufacturer, Platform, Rack, Region, Site
)
from extras.filters import TagFilter
from extras.models import TaggedItem
from utilities.filters import (
MACAddressFilter, MultiValueCharFilter, MultiValueDateFilter, MultiValueDateTimeFilter, MultiValueNumberFilter,
MultiValueTimeFilter, TagFilter, TreeNodeMultipleChoiceFilter,
MultiValueTimeFilter, TreeNodeMultipleChoiceFilter,
)
from utilities.filtersets import BaseFilterSet

View File

@ -2,9 +2,10 @@ 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 tenancy.filters import TenancyFilterSet
from utilities.filters import MultiValueMACAddressFilter, TagFilter, TreeNodeMultipleChoiceFilter
from utilities.filters import MultiValueMACAddressFilter, TreeNodeMultipleChoiceFilter
from utilities.filtersets import OrganizationalModelFilterSet, PrimaryModelFilterSet
from .choices import *
from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface