Broke out filter and form for re-use

This commit is contained in:
dansheps 2019-05-06 13:43:24 -05:00
parent c274b4a729
commit 898ea00bbf
5 changed files with 34 additions and 18 deletions

View File

@ -2,6 +2,7 @@
## Enhancements
* [#3028](https://github.com/digitalocean/netbox/issues/3028) - Add filtering for local device config context
* [#3150](https://github.com/digitalocean/netbox/issues/3150) - Fix formatting of cable length during cable trace
* [#3085](https://github.com/digitalocean/netbox/issues/3085) - Catch all exceptions during export template rendering

View File

@ -6,7 +6,7 @@ from django.db.models import Q
from netaddr import EUI
from netaddr.core import AddrFormatError
from extras.filters import CustomFieldFilterSet
from extras.filters import CustomFieldFilterSet, LocalConfigContextFilter
from tenancy.models import Tenant
from utilities.constants import COLOR_CHOICES
from utilities.filters import (
@ -450,7 +450,7 @@ class PlatformFilter(NameSlugSearchFilterSet):
fields = ['name', 'slug']
class DeviceFilter(CustomFieldFilterSet):
class DeviceFilter(LocalConfigContextFilter, CustomFieldFilterSet):
id__in = NumericInFilter(
field_name='id',
lookup_expr='in'
@ -597,10 +597,6 @@ class DeviceFilter(CustomFieldFilterSet):
method='_pass_through_ports',
label='Has pass-through ports',
)
local_context_data = django_filters.BooleanFilter(
method='_local_context_data',
label='Has local config context data',
)
tag = TagFilter()
class Meta:
@ -655,9 +651,6 @@ class DeviceFilter(CustomFieldFilterSet):
def _interfaces(self, queryset, name, value):
return queryset.exclude(interfaces__isnull=value)
def _local_context_data(self, queryset, name, value):
return queryset.exclude(local_context_data__isnull=value)
def _pass_through_ports(self, queryset, name, value):
return queryset.exclude(
frontports__isnull=value,

View File

@ -10,7 +10,9 @@ from mptt.forms import TreeNodeChoiceField
from taggit.forms import TagField
from timezone_field import TimeZoneFormField
from extras.forms import AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm
from extras.forms import (
AddRemoveTagsForm, CustomFieldForm, CustomFieldBulkEditForm, CustomFieldFilterForm, LocalConfigContextFilterForm
)
from ipam.models import IPAddress, VLAN, VLANGroup
from tenancy.forms import TenancyForm
from tenancy.models import Tenant
@ -1643,7 +1645,7 @@ class DeviceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEditF
]
class DeviceFilterForm(BootstrapMixin, CustomFieldFilterForm):
class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, CustomFieldFilterForm):
model = Device
q = forms.CharField(
required=False,
@ -1800,13 +1802,6 @@ class DeviceFilterForm(BootstrapMixin, CustomFieldFilterForm):
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
local_context_data = forms.NullBooleanField(
required=False,
label='Has local config context data',
widget=StaticSelect2(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
#

View File

@ -208,6 +208,19 @@ class ConfigContextFilter(django_filters.FilterSet):
)
#
# Filter for Local Config Context Data
#
class LocalConfigContextFilter(django_filters.FilterSet):
local_context_data = django_filters.BooleanFilter(
method='_local_context_data',
label='Has local config context data',
)
def _local_context_data(self, queryset, name, value):
return queryset.exclude(local_context_data__isnull=value)
class ObjectChangeFilter(django_filters.FilterSet):
q = django_filters.CharFilter(
method='search',

View File

@ -329,6 +329,20 @@ class ConfigContextFilterForm(BootstrapMixin, forms.Form):
)
#
# Filter form for local config context data
#
class LocalConfigContextFilterForm(BootstrapMixin, forms.Form):
local_context_data = forms.NullBooleanField(
required=False,
label='Has local config context data',
widget=StaticSelect2(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
#
# Image attachments
#