1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes #7886: Introduce a base FilterForm class

This commit is contained in:
jeremystretch
2021-11-19 15:12:45 -05:00
parent 7072f207c0
commit b7c9ca720a
9 changed files with 33 additions and 309 deletions

View File

@ -23,11 +23,6 @@ class ProviderFilterForm(CustomFieldModelFilterForm):
['region_id', 'site_group_id', 'site_id'], ['region_id', 'site_group_id', 'site_id'],
['asn'], ['asn'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -63,11 +58,6 @@ class ProviderNetworkFilterForm(CustomFieldModelFilterForm):
('q', 'tag'), ('q', 'tag'),
('provider_id',), ('provider_id',),
) )
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
provider_id = DynamicModelMultipleChoiceField( provider_id = DynamicModelMultipleChoiceField(
queryset=Provider.objects.all(), queryset=Provider.objects.all(),
required=False, required=False,
@ -79,11 +69,6 @@ class ProviderNetworkFilterForm(CustomFieldModelFilterForm):
class CircuitTypeFilterForm(CustomFieldModelFilterForm): class CircuitTypeFilterForm(CustomFieldModelFilterForm):
model = CircuitType model = CircuitType
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
tag = TagFilterField(model) tag = TagFilterField(model)
@ -96,11 +81,6 @@ class CircuitFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['region_id', 'site_group_id', 'site_id'], ['region_id', 'site_group_id', 'site_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
type_id = DynamicModelMultipleChoiceField( type_id = DynamicModelMultipleChoiceField(
queryset=CircuitType.objects.all(), queryset=CircuitType.objects.all(),
required=False, required=False,

View File

@ -9,7 +9,7 @@ from extras.forms import CustomFieldModelFilterForm, LocalConfigContextFilterFor
from ipam.models import ASN from ipam.models import ASN
from tenancy.forms import TenancyFilterForm from tenancy.forms import TenancyFilterForm
from utilities.forms import ( from utilities.forms import (
APISelectMultiple, add_blank_choice, BootstrapMixin, ColorField, DynamicModelMultipleChoiceField, StaticSelect, APISelectMultiple, add_blank_choice, ColorField, DynamicModelMultipleChoiceField, FilterForm, StaticSelect,
StaticSelectMultiple, TagFilterField, BOOLEAN_WITH_BLANK_CHOICES, StaticSelectMultiple, TagFilterField, BOOLEAN_WITH_BLANK_CHOICES,
) )
from wireless.choices import * from wireless.choices import *
@ -51,11 +51,6 @@ class DeviceComponentFilterForm(CustomFieldModelFilterForm):
field_order = [ field_order = [
'q', 'name', 'label', 'region_id', 'site_group_id', 'site_id', 'q', 'name', 'label', 'region_id', 'site_group_id', 'site_id',
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
name = forms.CharField( name = forms.CharField(
required=False required=False
) )
@ -114,11 +109,6 @@ class DeviceComponentFilterForm(CustomFieldModelFilterForm):
class RegionFilterForm(CustomFieldModelFilterForm): class RegionFilterForm(CustomFieldModelFilterForm):
model = Region model = Region
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
parent_id = DynamicModelMultipleChoiceField( parent_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -130,11 +120,6 @@ class RegionFilterForm(CustomFieldModelFilterForm):
class SiteGroupFilterForm(CustomFieldModelFilterForm): class SiteGroupFilterForm(CustomFieldModelFilterForm):
model = SiteGroup model = SiteGroup
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
parent_id = DynamicModelMultipleChoiceField( parent_id = DynamicModelMultipleChoiceField(
queryset=SiteGroup.objects.all(), queryset=SiteGroup.objects.all(),
required=False, required=False,
@ -153,11 +138,6 @@ class SiteFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
['asn_id'] ['asn_id']
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
status = forms.MultipleChoiceField( status = forms.MultipleChoiceField(
choices=SiteStatusChoices, choices=SiteStatusChoices,
required=False, required=False,
@ -191,11 +171,6 @@ class LocationFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['region_id', 'site_group_id', 'site_id', 'parent_id'], ['region_id', 'site_group_id', 'site_id', 'parent_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -233,11 +208,6 @@ class LocationFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
class RackRoleFilterForm(CustomFieldModelFilterForm): class RackRoleFilterForm(CustomFieldModelFilterForm):
model = RackRole model = RackRole
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
tag = TagFilterField(model) tag = TagFilterField(model)
@ -251,11 +221,6 @@ class RackFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['type', 'width', 'serial', 'asset_tag'], ['type', 'width', 'serial', 'asset_tag'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -338,11 +303,6 @@ class RackReservationFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['region_id', 'site_id', 'location_id'], ['region_id', 'site_id', 'location_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -379,11 +339,6 @@ class RackReservationFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
class ManufacturerFilterForm(CustomFieldModelFilterForm): class ManufacturerFilterForm(CustomFieldModelFilterForm):
model = Manufacturer model = Manufacturer
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
tag = TagFilterField(model) tag = TagFilterField(model)
@ -394,11 +349,6 @@ class DeviceTypeFilterForm(CustomFieldModelFilterForm):
['manufacturer_id', 'subdevice_role', 'airflow'], ['manufacturer_id', 'subdevice_role', 'airflow'],
['console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports'], ['console_ports', 'console_server_ports', 'power_ports', 'power_outlets', 'interfaces', 'pass_through_ports'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
manufacturer_id = DynamicModelMultipleChoiceField( manufacturer_id = DynamicModelMultipleChoiceField(
queryset=Manufacturer.objects.all(), queryset=Manufacturer.objects.all(),
required=False, required=False,
@ -462,21 +412,11 @@ class DeviceTypeFilterForm(CustomFieldModelFilterForm):
class DeviceRoleFilterForm(CustomFieldModelFilterForm): class DeviceRoleFilterForm(CustomFieldModelFilterForm):
model = DeviceRole model = DeviceRole
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
tag = TagFilterField(model) tag = TagFilterField(model)
class PlatformFilterForm(CustomFieldModelFilterForm): class PlatformFilterForm(CustomFieldModelFilterForm):
model = Platform model = Platform
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
manufacturer_id = DynamicModelMultipleChoiceField( manufacturer_id = DynamicModelMultipleChoiceField(
queryset=Manufacturer.objects.all(), queryset=Manufacturer.objects.all(),
required=False, required=False,
@ -503,11 +443,6 @@ class DeviceFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, CustomFi
'power_outlets', 'interfaces', 'pass_through_ports', 'local_context_data', 'power_outlets', 'interfaces', 'pass_through_ports', 'local_context_data',
], ],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -666,11 +601,6 @@ class VirtualChassisFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['region_id', 'site_group_id', 'site_id'], ['region_id', 'site_group_id', 'site_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -704,11 +634,6 @@ class CableFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['type', 'status', 'color'], ['type', 'status', 'color'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -767,11 +692,6 @@ class PowerPanelFilterForm(CustomFieldModelFilterForm):
('q', 'tag'), ('q', 'tag'),
('region_id', 'site_group_id', 'site_id', 'location_id') ('region_id', 'site_group_id', 'site_id', 'location_id')
) )
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -815,11 +735,6 @@ class PowerFeedFilterForm(CustomFieldModelFilterForm):
['power_panel_id', 'rack_id'], ['power_panel_id', 'rack_id'],
['status', 'type', 'supply', 'phase', 'voltage', 'amperage', 'max_utilization'], ['status', 'type', 'supply', 'phase', 'voltage', 'amperage', 'max_utilization'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -1112,12 +1027,7 @@ class InventoryItemFilterForm(DeviceComponentFilterForm):
# Connections # Connections
# #
class ConsoleConnectionFilterForm(BootstrapMixin, forms.Form): class ConsoleConnectionFilterForm(FilterForm):
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -1144,12 +1054,7 @@ class ConsoleConnectionFilterForm(BootstrapMixin, forms.Form):
) )
class PowerConnectionFilterForm(BootstrapMixin, forms.Form): class PowerConnectionFilterForm(FilterForm):
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -1176,12 +1081,7 @@ class PowerConnectionFilterForm(BootstrapMixin, forms.Form):
) )
class InterfaceConnectionFilterForm(BootstrapMixin, forms.Form): class InterfaceConnectionFilterForm(FilterForm):
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,

View File

@ -4,7 +4,7 @@ from django.db.models import Q
from extras.choices import * from extras.choices import *
from extras.models import * from extras.models import *
from utilities.forms import BootstrapMixin, BulkEditForm, CSVModelForm from utilities.forms import BootstrapMixin, BulkEditForm, CSVModelForm, FilterForm
__all__ = ( __all__ = (
'CustomFieldModelCSVForm', 'CustomFieldModelCSVForm',
@ -105,7 +105,7 @@ class CustomFieldModelBulkEditForm(BulkEditForm):
self.custom_fields.append(cf.name) self.custom_fields.append(cf.name)
class CustomFieldModelFilterForm(BootstrapMixin, forms.Form): class CustomFieldModelFilterForm(FilterForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):

View File

@ -9,9 +9,8 @@ from extras.models import *
from extras.utils import FeatureQuery from extras.utils import FeatureQuery
from tenancy.models import Tenant, TenantGroup from tenancy.models import Tenant, TenantGroup
from utilities.forms import ( from utilities.forms import (
add_blank_choice, APISelectMultiple, BootstrapMixin, ContentTypeChoiceField, add_blank_choice, APISelectMultiple, ContentTypeChoiceField, ContentTypeMultipleChoiceField, DateTimePicker,
ContentTypeMultipleChoiceField, DateTimePicker, DynamicModelMultipleChoiceField, StaticSelect, DynamicModelMultipleChoiceField, FilterForm, StaticSelect, StaticSelectMultiple, BOOLEAN_WITH_BLANK_CHOICES,
StaticSelectMultiple, BOOLEAN_WITH_BLANK_CHOICES,
) )
from virtualization.models import Cluster, ClusterGroup from virtualization.models import Cluster, ClusterGroup
@ -28,17 +27,12 @@ __all__ = (
) )
class CustomFieldFilterForm(BootstrapMixin, forms.Form): class CustomFieldFilterForm(FilterForm):
field_groups = [ field_groups = [
['q'], ['q'],
['type', 'content_types'], ['type', 'content_types'],
['weight', 'required'], ['weight', 'required'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
content_types = ContentTypeMultipleChoiceField( content_types = ContentTypeMultipleChoiceField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('custom_fields'), limit_choices_to=FeatureQuery('custom_fields'),
@ -61,16 +55,11 @@ class CustomFieldFilterForm(BootstrapMixin, forms.Form):
) )
class CustomLinkFilterForm(BootstrapMixin, forms.Form): class CustomLinkFilterForm(FilterForm):
field_groups = [ field_groups = [
['q'], ['q'],
['content_type', 'weight', 'new_window'], ['content_type', 'weight', 'new_window'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
content_type = ContentTypeChoiceField( content_type = ContentTypeChoiceField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('custom_fields'), limit_choices_to=FeatureQuery('custom_fields'),
@ -87,16 +76,11 @@ class CustomLinkFilterForm(BootstrapMixin, forms.Form):
) )
class ExportTemplateFilterForm(BootstrapMixin, forms.Form): class ExportTemplateFilterForm(FilterForm):
field_groups = [ field_groups = [
['q'], ['q'],
['content_type', 'mime_type', 'file_extension', 'as_attachment'], ['content_type', 'mime_type', 'file_extension', 'as_attachment'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
content_type = ContentTypeChoiceField( content_type = ContentTypeChoiceField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('custom_fields'), limit_choices_to=FeatureQuery('custom_fields'),
@ -117,17 +101,12 @@ class ExportTemplateFilterForm(BootstrapMixin, forms.Form):
) )
class WebhookFilterForm(BootstrapMixin, forms.Form): class WebhookFilterForm(FilterForm):
field_groups = [ field_groups = [
['q'], ['q'],
['content_types', 'http_method', 'enabled'], ['content_types', 'http_method', 'enabled'],
['type_create', 'type_update', 'type_delete'], ['type_create', 'type_update', 'type_delete'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
content_types = ContentTypeMultipleChoiceField( content_types = ContentTypeMultipleChoiceField(
queryset=ContentType.objects.all(), queryset=ContentType.objects.all(),
limit_choices_to=FeatureQuery('custom_fields'), limit_choices_to=FeatureQuery('custom_fields'),
@ -165,12 +144,8 @@ class WebhookFilterForm(BootstrapMixin, forms.Form):
) )
class TagFilterForm(BootstrapMixin, forms.Form): class TagFilterForm(FilterForm):
model = Tag model = Tag
q = forms.CharField(
required=False,
label=_('Search')
)
content_type_id = ContentTypeMultipleChoiceField( content_type_id = ContentTypeMultipleChoiceField(
queryset=ContentType.objects.filter(FeatureQuery('tags').get_query()), queryset=ContentType.objects.filter(FeatureQuery('tags').get_query()),
required=False, required=False,
@ -178,7 +153,7 @@ class TagFilterForm(BootstrapMixin, forms.Form):
) )
class ConfigContextFilterForm(BootstrapMixin, forms.Form): class ConfigContextFilterForm(FilterForm):
field_groups = [ field_groups = [
['q', 'tag'], ['q', 'tag'],
['region_id', 'site_group_id', 'site_id'], ['region_id', 'site_group_id', 'site_id'],
@ -186,11 +161,6 @@ class ConfigContextFilterForm(BootstrapMixin, forms.Form):
['cluster_group_id', 'cluster_id'], ['cluster_group_id', 'cluster_id'],
['tenant_group_id', 'tenant_id'] ['tenant_group_id', 'tenant_id']
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -270,18 +240,13 @@ class LocalConfigContextFilterForm(forms.Form):
) )
class JournalEntryFilterForm(BootstrapMixin, forms.Form): class JournalEntryFilterForm(FilterForm):
model = JournalEntry model = JournalEntry
field_groups = [ field_groups = [
['q'], ['q'],
['created_before', 'created_after', 'created_by_id'], ['created_before', 'created_after', 'created_by_id'],
['assigned_object_type_id', 'kind'] ['assigned_object_type_id', 'kind']
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
created_after = forms.DateTimeField( created_after = forms.DateTimeField(
required=False, required=False,
label=_('After'), label=_('After'),
@ -317,18 +282,13 @@ class JournalEntryFilterForm(BootstrapMixin, forms.Form):
) )
class ObjectChangeFilterForm(BootstrapMixin, forms.Form): class ObjectChangeFilterForm(FilterForm):
model = ObjectChange model = ObjectChange
field_groups = [ field_groups = [
['q'], ['q'],
['time_before', 'time_after', 'action'], ['time_before', 'time_after', 'action'],
['user_id', 'changed_object_type_id'], ['user_id', 'changed_object_type_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
time_after = forms.DateTimeField( time_after = forms.DateTimeField(
required=False, required=False,
label=_('After'), label=_('After'),

View File

@ -45,11 +45,6 @@ class VRFFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['import_target_id', 'export_target_id'], ['import_target_id', 'export_target_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
import_target_id = DynamicModelMultipleChoiceField( import_target_id = DynamicModelMultipleChoiceField(
queryset=RouteTarget.objects.all(), queryset=RouteTarget.objects.all(),
required=False, required=False,
@ -72,11 +67,6 @@ class RouteTargetFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['importing_vrf_id', 'exporting_vrf_id'], ['importing_vrf_id', 'exporting_vrf_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
importing_vrf_id = DynamicModelMultipleChoiceField( importing_vrf_id = DynamicModelMultipleChoiceField(
queryset=VRF.objects.all(), queryset=VRF.objects.all(),
required=False, required=False,
@ -94,11 +84,6 @@ class RouteTargetFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
class RIRFilterForm(CustomFieldModelFilterForm): class RIRFilterForm(CustomFieldModelFilterForm):
model = RIR model = RIR
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
is_private = forms.NullBooleanField( is_private = forms.NullBooleanField(
required=False, required=False,
label=_('Private'), label=_('Private'),
@ -116,11 +101,6 @@ class AggregateFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['family', 'rir_id'], ['family', 'rir_id'],
['tenant_group_id', 'tenant_id'] ['tenant_group_id', 'tenant_id']
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
family = forms.ChoiceField( family = forms.ChoiceField(
required=False, required=False,
choices=add_blank_choice(IPAddressFamilyChoices), choices=add_blank_choice(IPAddressFamilyChoices),
@ -144,11 +124,6 @@ class ASNFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
['site_id'], ['site_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
rir_id = DynamicModelMultipleChoiceField( rir_id = DynamicModelMultipleChoiceField(
queryset=RIR.objects.all(), queryset=RIR.objects.all(),
required=False, required=False,
@ -165,11 +140,6 @@ class ASNFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
class RoleFilterForm(CustomFieldModelFilterForm): class RoleFilterForm(CustomFieldModelFilterForm):
model = Role model = Role
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
tag = TagFilterField(model) tag = TagFilterField(model)
@ -182,11 +152,6 @@ class PrefixFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['region_id', 'site_group_id', 'site_id'], ['region_id', 'site_group_id', 'site_id'],
['tenant_group_id', 'tenant_id'] ['tenant_group_id', 'tenant_id']
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
mask_length__lte = forms.IntegerField( mask_length__lte = forms.IntegerField(
widget=forms.HiddenInput() widget=forms.HiddenInput()
) )
@ -282,11 +247,6 @@ class IPRangeFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['family', 'vrf_id', 'status', 'role_id'], ['family', 'vrf_id', 'status', 'role_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
family = forms.ChoiceField( family = forms.ChoiceField(
required=False, required=False,
choices=add_blank_choice(IPAddressFamilyChoices), choices=add_blank_choice(IPAddressFamilyChoices),
@ -327,11 +287,6 @@ class IPAddressFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['vrf_id', 'present_in_vrf_id'], ['vrf_id', 'present_in_vrf_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
parent = forms.CharField( parent = forms.CharField(
required=False, required=False,
widget=forms.TextInput( widget=forms.TextInput(
@ -393,11 +348,6 @@ class FHRPGroupFilterForm(CustomFieldModelFilterForm):
('protocol', 'group_id'), ('protocol', 'group_id'),
('auth_type', 'auth_key'), ('auth_type', 'auth_key'),
) )
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
protocol = forms.MultipleChoiceField( protocol = forms.MultipleChoiceField(
choices=FHRPGroupProtocolChoices, choices=FHRPGroupProtocolChoices,
required=False, required=False,
@ -427,11 +377,6 @@ class VLANGroupFilterForm(CustomFieldModelFilterForm):
['region', 'sitegroup', 'site', 'location', 'rack'] ['region', 'sitegroup', 'site', 'location', 'rack']
] ]
model = VLANGroup model = VLANGroup
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region = DynamicModelMultipleChoiceField( region = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -473,11 +418,6 @@ class VLANFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['group_id', 'status', 'role_id', 'vid'], ['group_id', 'status', 'role_id', 'vid'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
region_id = DynamicModelMultipleChoiceField( region_id = DynamicModelMultipleChoiceField(
queryset=Region.objects.all(), queryset=Region.objects.all(),
required=False, required=False,
@ -535,11 +475,6 @@ class ServiceFilterForm(CustomFieldModelFilterForm):
('q', 'tag'), ('q', 'tag'),
('protocol', 'port'), ('protocol', 'port'),
) )
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
protocol = forms.ChoiceField( protocol = forms.ChoiceField(
choices=add_blank_choice(ServiceProtocolChoices), choices=add_blank_choice(ServiceProtocolChoices),
required=False, required=False,

View File

@ -20,11 +20,6 @@ __all__ = (
class TenantGroupFilterForm(CustomFieldModelFilterForm): class TenantGroupFilterForm(CustomFieldModelFilterForm):
model = TenantGroup model = TenantGroup
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
parent_id = DynamicModelMultipleChoiceField( parent_id = DynamicModelMultipleChoiceField(
queryset=TenantGroup.objects.all(), queryset=TenantGroup.objects.all(),
required=False, required=False,
@ -40,11 +35,6 @@ class TenantFilterForm(CustomFieldModelFilterForm):
('q', 'tag'), ('q', 'tag'),
('group_id',), ('group_id',),
) )
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
group_id = DynamicModelMultipleChoiceField( group_id = DynamicModelMultipleChoiceField(
queryset=TenantGroup.objects.all(), queryset=TenantGroup.objects.all(),
required=False, required=False,
@ -61,11 +51,6 @@ class TenantFilterForm(CustomFieldModelFilterForm):
class ContactGroupFilterForm(CustomFieldModelFilterForm): class ContactGroupFilterForm(CustomFieldModelFilterForm):
model = ContactGroup model = ContactGroup
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
parent_id = DynamicModelMultipleChoiceField( parent_id = DynamicModelMultipleChoiceField(
queryset=ContactGroup.objects.all(), queryset=ContactGroup.objects.all(),
required=False, required=False,
@ -77,11 +62,6 @@ class ContactGroupFilterForm(CustomFieldModelFilterForm):
class ContactRoleFilterForm(CustomFieldModelFilterForm): class ContactRoleFilterForm(CustomFieldModelFilterForm):
model = ContactRole model = ContactRole
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
tag = TagFilterField(model) tag = TagFilterField(model)
@ -91,11 +71,6 @@ class ContactFilterForm(CustomFieldModelFilterForm):
('q', 'tag'), ('q', 'tag'),
('group_id',), ('group_id',),
) )
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
group_id = DynamicModelMultipleChoiceField( group_id = DynamicModelMultipleChoiceField(
queryset=ContactGroup.objects.all(), queryset=ContactGroup.objects.all(),
required=False, required=False,

View File

@ -3,6 +3,7 @@ import re
import yaml import yaml
from django import forms from django import forms
from django.utils.translation import gettext as _
from .widgets import APISelect, APISelectMultiple, ClearableFileInput, StaticSelect from .widgets import APISelect, APISelectMultiple, ClearableFileInput, StaticSelect
@ -13,6 +14,7 @@ __all__ = (
'BulkRenameForm', 'BulkRenameForm',
'ConfirmationForm', 'ConfirmationForm',
'CSVModelForm', 'CSVModelForm',
'FilterForm',
'ImportForm', 'ImportForm',
'ReturnURLForm', 'ReturnURLForm',
'TableConfigForm', 'TableConfigForm',
@ -177,6 +179,19 @@ class ImportForm(BootstrapMixin, forms.Form):
}) })
class FilterForm(BootstrapMixin, forms.Form):
"""
Base Form class for FilterSet forms.
"""
q = forms.CharField(
required=False,
widget=forms.TextInput(
attrs={'placeholder': _('All fields')}
),
label=_('Search')
)
class TableConfigForm(BootstrapMixin, forms.Form): class TableConfigForm(BootstrapMixin, forms.Form):
""" """
Form for configuring user's table preferences. Form for configuring user's table preferences.

View File

@ -5,8 +5,7 @@ from dcim.models import DeviceRole, Platform, Region, Site, SiteGroup
from extras.forms import CustomFieldModelFilterForm, LocalConfigContextFilterForm from extras.forms import CustomFieldModelFilterForm, LocalConfigContextFilterForm
from tenancy.forms import TenancyFilterForm from tenancy.forms import TenancyFilterForm
from utilities.forms import ( from utilities.forms import (
BootstrapMixin, DynamicModelMultipleChoiceField, StaticSelect, StaticSelectMultiple, TagFilterField, DynamicModelMultipleChoiceField, StaticSelect, StaticSelectMultiple, TagFilterField, BOOLEAN_WITH_BLANK_CHOICES,
BOOLEAN_WITH_BLANK_CHOICES,
) )
from virtualization.choices import * from virtualization.choices import *
from virtualization.models import * from virtualization.models import *
@ -22,21 +21,11 @@ __all__ = (
class ClusterTypeFilterForm(CustomFieldModelFilterForm): class ClusterTypeFilterForm(CustomFieldModelFilterForm):
model = ClusterType model = ClusterType
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
tag = TagFilterField(model) tag = TagFilterField(model)
class ClusterGroupFilterForm(CustomFieldModelFilterForm): class ClusterGroupFilterForm(CustomFieldModelFilterForm):
model = ClusterGroup model = ClusterGroup
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
tag = TagFilterField(model) tag = TagFilterField(model)
@ -51,11 +40,6 @@ class ClusterFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
['region_id', 'site_group_id', 'site_id'], ['region_id', 'site_group_id', 'site_id'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
type_id = DynamicModelMultipleChoiceField( type_id = DynamicModelMultipleChoiceField(
queryset=ClusterType.objects.all(), queryset=ClusterType.objects.all(),
required=False, required=False,
@ -104,11 +88,6 @@ class VirtualMachineFilterForm(LocalConfigContextFilterForm, TenancyFilterForm,
['status', 'role_id', 'platform_id', 'mac_address', 'has_primary_ip', 'local_context_data'], ['status', 'role_id', 'platform_id', 'mac_address', 'has_primary_ip', 'local_context_data'],
['tenant_group_id', 'tenant_id'], ['tenant_group_id', 'tenant_id'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
cluster_group_id = DynamicModelMultipleChoiceField( cluster_group_id = DynamicModelMultipleChoiceField(
queryset=ClusterGroup.objects.all(), queryset=ClusterGroup.objects.all(),
required=False, required=False,
@ -188,18 +167,13 @@ class VirtualMachineFilterForm(LocalConfigContextFilterForm, TenancyFilterForm,
tag = TagFilterField(model) tag = TagFilterField(model)
class VMInterfaceFilterForm(BootstrapMixin, forms.Form): class VMInterfaceFilterForm(CustomFieldModelFilterForm):
model = VMInterface model = VMInterface
field_groups = [ field_groups = [
['q', 'tag'], ['q', 'tag'],
['cluster_id', 'virtual_machine_id'], ['cluster_id', 'virtual_machine_id'],
['enabled', 'mac_address'], ['enabled', 'mac_address'],
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
cluster_id = DynamicModelMultipleChoiceField( cluster_id = DynamicModelMultipleChoiceField(
queryset=Cluster.objects.all(), queryset=Cluster.objects.all(),
required=False, required=False,

View File

@ -16,11 +16,6 @@ __all__ = (
class WirelessLANGroupFilterForm(CustomFieldModelFilterForm): class WirelessLANGroupFilterForm(CustomFieldModelFilterForm):
model = WirelessLANGroup model = WirelessLANGroup
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
parent_id = DynamicModelMultipleChoiceField( parent_id = DynamicModelMultipleChoiceField(
queryset=WirelessLANGroup.objects.all(), queryset=WirelessLANGroup.objects.all(),
required=False, required=False,
@ -36,11 +31,6 @@ class WirelessLANFilterForm(CustomFieldModelFilterForm):
('q', 'tag'), ('q', 'tag'),
('group_id',), ('group_id',),
] ]
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
ssid = forms.CharField( ssid = forms.CharField(
required=False, required=False,
label='SSID' label='SSID'
@ -70,11 +60,6 @@ class WirelessLANFilterForm(CustomFieldModelFilterForm):
class WirelessLinkFilterForm(CustomFieldModelFilterForm): class WirelessLinkFilterForm(CustomFieldModelFilterForm):
model = WirelessLink model = WirelessLink
q = forms.CharField(
required=False,
widget=forms.TextInput(attrs={'placeholder': _('All Fields')}),
label=_('Search')
)
ssid = forms.CharField( ssid = forms.CharField(
required=False, required=False,
label='SSID' label='SSID'