Browse Source

Merge pull request #7878 from netbox-community/7877-bootstrapmixin-cleanup

Closes #7877: BootstrapMixin cleanup
Jeremy Stretch 4 years ago
parent
commit
30a5c70260

+ 5 - 7
netbox/circuits/forms/bulk_edit.py

@@ -4,9 +4,7 @@ from circuits.choices import CircuitStatusChoices
 from circuits.models import *
 from circuits.models import *
 from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
 from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
 from tenancy.models import Tenant
 from tenancy.models import Tenant
-from utilities.forms import (
-    add_blank_choice, BootstrapMixin, CommentField, DynamicModelChoiceField, SmallTextarea, StaticSelect,
-)
+from utilities.forms import add_blank_choice, CommentField, DynamicModelChoiceField, SmallTextarea, StaticSelect
 
 
 __all__ = (
 __all__ = (
     'CircuitBulkEditForm',
     'CircuitBulkEditForm',
@@ -16,7 +14,7 @@ __all__ = (
 )
 )
 
 
 
 
-class ProviderBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ProviderBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Provider.objects.all(),
         queryset=Provider.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -55,7 +53,7 @@ class ProviderBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBu
         ]
         ]
 
 
 
 
-class ProviderNetworkBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ProviderNetworkBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ProviderNetwork.objects.all(),
         queryset=ProviderNetwork.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -79,7 +77,7 @@ class ProviderNetworkBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomField
         ]
         ]
 
 
 
 
-class CircuitTypeBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class CircuitTypeBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=CircuitType.objects.all(),
         queryset=CircuitType.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -93,7 +91,7 @@ class CircuitTypeBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMode
         nullable_fields = ['description']
         nullable_fields = ['description']
 
 
 
 
-class CircuitBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class CircuitBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Circuit.objects.all(),
         queryset=Circuit.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput

+ 5 - 5
netbox/circuits/forms/filtersets.py

@@ -6,7 +6,7 @@ from circuits.models import *
 from dcim.models import Region, Site, SiteGroup
 from dcim.models import Region, Site, SiteGroup
 from extras.forms import CustomFieldModelFilterForm
 from extras.forms import CustomFieldModelFilterForm
 from tenancy.forms import TenancyFilterForm
 from tenancy.forms import TenancyFilterForm
-from utilities.forms import BootstrapMixin, DynamicModelMultipleChoiceField, StaticSelectMultiple, TagFilterField
+from utilities.forms import DynamicModelMultipleChoiceField, StaticSelectMultiple, TagFilterField
 
 
 __all__ = (
 __all__ = (
     'CircuitFilterForm',
     'CircuitFilterForm',
@@ -16,7 +16,7 @@ __all__ = (
 )
 )
 
 
 
 
-class ProviderFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ProviderFilterForm(CustomFieldModelFilterForm):
     model = Provider
     model = Provider
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -57,7 +57,7 @@ class ProviderFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class ProviderNetworkFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ProviderNetworkFilterForm(CustomFieldModelFilterForm):
     model = ProviderNetwork
     model = ProviderNetwork
     field_groups = (
     field_groups = (
         ('q', 'tag'),
         ('q', 'tag'),
@@ -77,7 +77,7 @@ class ProviderNetworkFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class CircuitTypeFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class CircuitTypeFilterForm(CustomFieldModelFilterForm):
     model = CircuitType
     model = CircuitType
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -87,7 +87,7 @@ class CircuitTypeFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class CircuitFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = Circuit
     model = Circuit
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],

+ 4 - 4
netbox/circuits/forms/models.py

@@ -19,7 +19,7 @@ __all__ = (
 )
 )
 
 
 
 
-class ProviderForm(BootstrapMixin, CustomFieldModelForm):
+class ProviderForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     comments = CommentField()
     comments = CommentField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
@@ -53,7 +53,7 @@ class ProviderForm(BootstrapMixin, CustomFieldModelForm):
         }
         }
 
 
 
 
-class ProviderNetworkForm(BootstrapMixin, CustomFieldModelForm):
+class ProviderNetworkForm(CustomFieldModelForm):
     provider = DynamicModelChoiceField(
     provider = DynamicModelChoiceField(
         queryset=Provider.objects.all()
         queryset=Provider.objects.all()
     )
     )
@@ -73,7 +73,7 @@ class ProviderNetworkForm(BootstrapMixin, CustomFieldModelForm):
         )
         )
 
 
 
 
-class CircuitTypeForm(BootstrapMixin, CustomFieldModelForm):
+class CircuitTypeForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -87,7 +87,7 @@ class CircuitTypeForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
 
 
 
 
-class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class CircuitForm(TenancyForm, CustomFieldModelForm):
     provider = DynamicModelChoiceField(
     provider = DynamicModelChoiceField(
         queryset=Provider.objects.all()
         queryset=Provider.objects.all()
     )
     )

+ 2 - 2
netbox/dcim/forms/bulk_create.py

@@ -3,7 +3,7 @@ from django import forms
 from dcim.models import *
 from dcim.models import *
 from extras.forms import CustomFieldsMixin
 from extras.forms import CustomFieldsMixin
 from extras.models import Tag
 from extras.models import Tag
-from utilities.forms import BootstrapMixin, DynamicModelMultipleChoiceField, form_from_model
+from utilities.forms import DynamicModelMultipleChoiceField, form_from_model
 from .object_create import ComponentForm
 from .object_create import ComponentForm
 
 
 __all__ = (
 __all__ = (
@@ -23,7 +23,7 @@ __all__ = (
 # Device components
 # Device components
 #
 #
 
 
-class DeviceBulkAddComponentForm(BootstrapMixin, CustomFieldsMixin, ComponentForm):
+class DeviceBulkAddComponentForm(CustomFieldsMixin, ComponentForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Device.objects.all(),
         queryset=Device.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()

+ 26 - 35
netbox/dcim/forms/bulk_edit.py

@@ -11,8 +11,8 @@ from ipam.constants import BGP_ASN_MIN, BGP_ASN_MAX
 from ipam.models import VLAN, ASN
 from ipam.models import VLAN, ASN
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from utilities.forms import (
 from utilities.forms import (
-    add_blank_choice, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorField, CommentField,
-    DynamicModelChoiceField, DynamicModelMultipleChoiceField, form_from_model, SmallTextarea, StaticSelect,
+    add_blank_choice, BulkEditForm, BulkEditNullBooleanSelect, ColorField, CommentField, DynamicModelChoiceField,
+    DynamicModelMultipleChoiceField, form_from_model, SmallTextarea, StaticSelect,
 )
 )
 
 
 __all__ = (
 __all__ = (
@@ -52,7 +52,7 @@ __all__ = (
 )
 )
 
 
 
 
-class RegionBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class RegionBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -70,7 +70,7 @@ class RegionBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk
         nullable_fields = ['parent', 'description']
         nullable_fields = ['parent', 'description']
 
 
 
 
-class SiteGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class SiteGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=SiteGroup.objects.all(),
         queryset=SiteGroup.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -88,7 +88,7 @@ class SiteGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelB
         nullable_fields = ['parent', 'description']
         nullable_fields = ['parent', 'description']
 
 
 
 
-class SiteBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class SiteBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Site.objects.all(),
         queryset=Site.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -138,7 +138,7 @@ class SiteBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
         ]
         ]
 
 
 
 
-class LocationBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class LocationBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Location.objects.all(),
         queryset=Location.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -167,7 +167,7 @@ class LocationBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBu
         nullable_fields = ['parent', 'tenant', 'description']
         nullable_fields = ['parent', 'tenant', 'description']
 
 
 
 
-class RackRoleBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class RackRoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=RackRole.objects.all(),
         queryset=RackRole.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -184,7 +184,7 @@ class RackRoleBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBu
         nullable_fields = ['color', 'description']
         nullable_fields = ['color', 'description']
 
 
 
 
-class RackBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class RackBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Rack.objects.all(),
         queryset=Rack.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -284,7 +284,7 @@ class RackBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
         ]
         ]
 
 
 
 
-class RackReservationBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class RackReservationBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=RackReservation.objects.all(),
         queryset=RackReservation.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -309,7 +309,7 @@ class RackReservationBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomField
         nullable_fields = []
         nullable_fields = []
 
 
 
 
-class ManufacturerBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ManufacturerBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Manufacturer.objects.all(),
         queryset=Manufacturer.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -323,7 +323,7 @@ class ManufacturerBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMod
         nullable_fields = ['description']
         nullable_fields = ['description']
 
 
 
 
-class DeviceTypeBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class DeviceTypeBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=DeviceType.objects.all(),
         queryset=DeviceType.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -351,7 +351,7 @@ class DeviceTypeBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModel
         nullable_fields = ['airflow']
         nullable_fields = ['airflow']
 
 
 
 
-class DeviceRoleBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class DeviceRoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=DeviceRole.objects.all(),
         queryset=DeviceRole.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -373,7 +373,7 @@ class DeviceRoleBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModel
         nullable_fields = ['color', 'description']
         nullable_fields = ['color', 'description']
 
 
 
 
-class PlatformBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class PlatformBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Platform.objects.all(),
         queryset=Platform.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -396,7 +396,7 @@ class PlatformBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBu
         nullable_fields = ['manufacturer', 'napalm_driver', 'description']
         nullable_fields = ['manufacturer', 'napalm_driver', 'description']
 
 
 
 
-class DeviceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class DeviceBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Device.objects.all(),
         queryset=Device.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -457,7 +457,7 @@ class DeviceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk
         ]
         ]
 
 
 
 
-class CableBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class CableBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Cable.objects.all(),
         queryset=Cable.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -513,7 +513,7 @@ class CableBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkE
             })
             })
 
 
 
 
-class VirtualChassisBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class VirtualChassisBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=VirtualChassis.objects.all(),
         queryset=VirtualChassis.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -527,7 +527,7 @@ class VirtualChassisBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldM
         nullable_fields = ['domain']
         nullable_fields = ['domain']
 
 
 
 
-class PowerPanelBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class PowerPanelBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=PowerPanel.objects.all(),
         queryset=PowerPanel.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -566,7 +566,7 @@ class PowerPanelBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModel
         nullable_fields = ['location']
         nullable_fields = ['location']
 
 
 
 
-class PowerFeedBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class PowerFeedBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=PowerFeed.objects.all(),
         queryset=PowerFeed.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -631,7 +631,7 @@ class PowerFeedBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelB
 # Device component templates
 # Device component templates
 #
 #
 
 
-class ConsolePortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class ConsolePortTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ConsolePortTemplate.objects.all(),
         queryset=ConsolePortTemplate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -650,7 +650,7 @@ class ConsolePortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ('label', 'type', 'description')
         nullable_fields = ('label', 'type', 'description')
 
 
 
 
-class ConsoleServerPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class ConsoleServerPortTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ConsoleServerPortTemplate.objects.all(),
         queryset=ConsoleServerPortTemplate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -672,7 +672,7 @@ class ConsoleServerPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ('label', 'type', 'description')
         nullable_fields = ('label', 'type', 'description')
 
 
 
 
-class PowerPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class PowerPortTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=PowerPortTemplate.objects.all(),
         queryset=PowerPortTemplate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -704,7 +704,7 @@ class PowerPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ('label', 'type', 'maximum_draw', 'allocated_draw', 'description')
         nullable_fields = ('label', 'type', 'maximum_draw', 'allocated_draw', 'description')
 
 
 
 
-class PowerOutletTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class PowerOutletTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=PowerOutletTemplate.objects.all(),
         queryset=PowerOutletTemplate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -752,7 +752,7 @@ class PowerOutletTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
             self.fields['power_port'].widget.attrs['disabled'] = True
             self.fields['power_port'].widget.attrs['disabled'] = True
 
 
 
 
-class InterfaceTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class InterfaceTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=InterfaceTemplate.objects.all(),
         queryset=InterfaceTemplate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -779,7 +779,7 @@ class InterfaceTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ('label', 'description')
         nullable_fields = ('label', 'description')
 
 
 
 
-class FrontPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class FrontPortTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=FrontPortTemplate.objects.all(),
         queryset=FrontPortTemplate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -804,7 +804,7 @@ class FrontPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ('description',)
         nullable_fields = ('description',)
 
 
 
 
-class RearPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class RearPortTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=RearPortTemplate.objects.all(),
         queryset=RearPortTemplate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -829,7 +829,7 @@ class RearPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ('description',)
         nullable_fields = ('description',)
 
 
 
 
-class DeviceBayTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class DeviceBayTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=DeviceBayTemplate.objects.all(),
         queryset=DeviceBayTemplate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -852,7 +852,6 @@ class DeviceBayTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
 
 
 class ConsolePortBulkEditForm(
 class ConsolePortBulkEditForm(
     form_from_model(ConsolePort, ['label', 'type', 'speed', 'mark_connected', 'description']),
     form_from_model(ConsolePort, ['label', 'type', 'speed', 'mark_connected', 'description']),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):
@@ -871,7 +870,6 @@ class ConsolePortBulkEditForm(
 
 
 class ConsoleServerPortBulkEditForm(
 class ConsoleServerPortBulkEditForm(
     form_from_model(ConsoleServerPort, ['label', 'type', 'speed', 'mark_connected', 'description']),
     form_from_model(ConsoleServerPort, ['label', 'type', 'speed', 'mark_connected', 'description']),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):
@@ -890,7 +888,6 @@ class ConsoleServerPortBulkEditForm(
 
 
 class PowerPortBulkEditForm(
 class PowerPortBulkEditForm(
     form_from_model(PowerPort, ['label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description']),
     form_from_model(PowerPort, ['label', 'type', 'maximum_draw', 'allocated_draw', 'mark_connected', 'description']),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):
@@ -909,7 +906,6 @@ class PowerPortBulkEditForm(
 
 
 class PowerOutletBulkEditForm(
 class PowerOutletBulkEditForm(
     form_from_model(PowerOutlet, ['label', 'type', 'feed_leg', 'power_port', 'mark_connected', 'description']),
     form_from_model(PowerOutlet, ['label', 'type', 'feed_leg', 'power_port', 'mark_connected', 'description']),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):
@@ -948,7 +944,6 @@ class InterfaceBulkEditForm(
         'label', 'type', 'parent', 'bridge', 'lag', 'mac_address', 'wwn', 'mtu', 'mgmt_only', 'mark_connected',
         'label', 'type', 'parent', 'bridge', 'lag', 'mac_address', 'wwn', 'mtu', 'mgmt_only', 'mark_connected',
         'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power',
         'description', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power',
     ]),
     ]),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):
@@ -1061,7 +1056,6 @@ class InterfaceBulkEditForm(
 
 
 class FrontPortBulkEditForm(
 class FrontPortBulkEditForm(
     form_from_model(FrontPort, ['label', 'type', 'color', 'mark_connected', 'description']),
     form_from_model(FrontPort, ['label', 'type', 'color', 'mark_connected', 'description']),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):
@@ -1076,7 +1070,6 @@ class FrontPortBulkEditForm(
 
 
 class RearPortBulkEditForm(
 class RearPortBulkEditForm(
     form_from_model(RearPort, ['label', 'type', 'color', 'mark_connected', 'description']),
     form_from_model(RearPort, ['label', 'type', 'color', 'mark_connected', 'description']),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):
@@ -1091,7 +1084,6 @@ class RearPortBulkEditForm(
 
 
 class DeviceBayBulkEditForm(
 class DeviceBayBulkEditForm(
     form_from_model(DeviceBay, ['label', 'description']),
     form_from_model(DeviceBay, ['label', 'description']),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):
@@ -1106,7 +1098,6 @@ class DeviceBayBulkEditForm(
 
 
 class InventoryItemBulkEditForm(
 class InventoryItemBulkEditForm(
     form_from_model(InventoryItem, ['label', 'manufacturer', 'part_id', 'description']),
     form_from_model(InventoryItem, ['label', 'manufacturer', 'part_id', 'description']),
-    BootstrapMixin,
     AddRemoveTagsForm,
     AddRemoveTagsForm,
     CustomFieldModelBulkEditForm
     CustomFieldModelBulkEditForm
 ):
 ):

+ 4 - 4
netbox/dcim/forms/connections.py

@@ -3,7 +3,7 @@ from dcim.models import *
 from extras.forms import CustomFieldModelForm
 from extras.forms import CustomFieldModelForm
 from extras.models import Tag
 from extras.models import Tag
 from tenancy.forms import TenancyForm
 from tenancy.forms import TenancyForm
-from utilities.forms import BootstrapMixin, DynamicModelChoiceField, DynamicModelMultipleChoiceField, StaticSelect
+from utilities.forms import DynamicModelChoiceField, DynamicModelMultipleChoiceField, StaticSelect
 
 
 __all__ = (
 __all__ = (
     'ConnectCableToCircuitTerminationForm',
     'ConnectCableToCircuitTerminationForm',
@@ -18,7 +18,7 @@ __all__ = (
 )
 )
 
 
 
 
-class ConnectCableToDeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class ConnectCableToDeviceForm(TenancyForm, CustomFieldModelForm):
     """
     """
     Base form for connecting a Cable to a Device component
     Base form for connecting a Cable to a Device component
     """
     """
@@ -171,7 +171,7 @@ class ConnectCableToRearPortForm(ConnectCableToDeviceForm):
     )
     )
 
 
 
 
-class ConnectCableToCircuitTerminationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class ConnectCableToCircuitTerminationForm(TenancyForm, CustomFieldModelForm):
     termination_b_provider = DynamicModelChoiceField(
     termination_b_provider = DynamicModelChoiceField(
         queryset=Provider.objects.all(),
         queryset=Provider.objects.all(),
         label='Provider',
         label='Provider',
@@ -229,7 +229,7 @@ class ConnectCableToCircuitTerminationForm(BootstrapMixin, TenancyForm, CustomFi
         return getattr(self.cleaned_data['termination_b_id'], 'pk', None)
         return getattr(self.cleaned_data['termination_b_id'], 'pk', None)
 
 
 
 
-class ConnectCableToPowerFeedForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class ConnectCableToPowerFeedForm(TenancyForm, CustomFieldModelForm):
     termination_b_region = DynamicModelChoiceField(
     termination_b_region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         label='Region',
         label='Region',

+ 17 - 17
netbox/dcim/forms/filtersets.py

@@ -47,7 +47,7 @@ __all__ = (
 )
 )
 
 
 
 
-class DeviceComponentFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+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',
     ]
     ]
@@ -112,7 +112,7 @@ class DeviceComponentFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     )
     )
 
 
 
 
-class RegionFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class RegionFilterForm(CustomFieldModelFilterForm):
     model = Region
     model = Region
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -128,7 +128,7 @@ class RegionFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class SiteGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class SiteGroupFilterForm(CustomFieldModelFilterForm):
     model = SiteGroup
     model = SiteGroup
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -144,7 +144,7 @@ class SiteGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class SiteFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class SiteFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = Site
     model = Site
     field_order = ['q', 'status', 'region_id', 'tenant_group_id', 'tenant_id', 'asn_id']
     field_order = ['q', 'status', 'region_id', 'tenant_group_id', 'tenant_id', 'asn_id']
     field_groups = [
     field_groups = [
@@ -184,7 +184,7 @@ class SiteFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class LocationFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class LocationFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = Location
     model = Location
     field_groups = [
     field_groups = [
         ['q'],
         ['q'],
@@ -231,7 +231,7 @@ class LocationFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilt
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class RackRoleFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class RackRoleFilterForm(CustomFieldModelFilterForm):
     model = RackRole
     model = RackRole
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -241,7 +241,7 @@ class RackRoleFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class RackFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class RackFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = Rack
     model = Rack
     field_order = ['q', 'region_id', 'site_id', 'location_id', 'status', 'role_id', 'tenant_group_id', 'tenant_id']
     field_order = ['q', 'region_id', 'site_id', 'location_id', 'status', 'role_id', 'tenant_group_id', 'tenant_id']
     field_groups = [
     field_groups = [
@@ -329,7 +329,7 @@ class RackElevationFilterForm(RackFilterForm):
     )
     )
 
 
 
 
-class RackReservationFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class RackReservationFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = RackReservation
     model = RackReservation
     field_order = ['q', 'region_id', 'site_id', 'location_id', 'user_id', 'tenant_group_id', 'tenant_id']
     field_order = ['q', 'region_id', 'site_id', 'location_id', 'user_id', 'tenant_group_id', 'tenant_id']
     field_groups = [
     field_groups = [
@@ -377,7 +377,7 @@ class RackReservationFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldMo
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class ManufacturerFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ManufacturerFilterForm(CustomFieldModelFilterForm):
     model = Manufacturer
     model = Manufacturer
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -387,7 +387,7 @@ class ManufacturerFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class DeviceTypeFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class DeviceTypeFilterForm(CustomFieldModelFilterForm):
     model = DeviceType
     model = DeviceType
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -460,7 +460,7 @@ class DeviceTypeFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class DeviceRoleFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class DeviceRoleFilterForm(CustomFieldModelFilterForm):
     model = DeviceRole
     model = DeviceRole
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -470,7 +470,7 @@ class DeviceRoleFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class PlatformFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class PlatformFilterForm(CustomFieldModelFilterForm):
     model = Platform
     model = Platform
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -486,7 +486,7 @@ class PlatformFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilterForm, CustomFieldModelFilterForm):
+class DeviceFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, CustomFieldModelFilterForm):
     model = Device
     model = Device
     field_order = [
     field_order = [
         'q', 'region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', 'status', 'role_id', 'tenant_group_id',
         'q', 'region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', 'status', 'role_id', 'tenant_group_id',
@@ -658,7 +658,7 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class VirtualChassisFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class VirtualChassisFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = VirtualChassis
     model = VirtualChassis
     field_order = ['q', 'region_id', 'site_group_id', 'site_id', 'tenant_group_id', 'tenant_id']
     field_order = ['q', 'region_id', 'site_group_id', 'site_id', 'tenant_group_id', 'tenant_id']
     field_groups = [
     field_groups = [
@@ -696,7 +696,7 @@ class VirtualChassisFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldMod
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class CableFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class CableFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = Cable
     model = Cable
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -761,7 +761,7 @@ class CableFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterF
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class PowerPanelFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class PowerPanelFilterForm(CustomFieldModelFilterForm):
     model = PowerPanel
     model = PowerPanel
     field_groups = (
     field_groups = (
         ('q', 'tag'),
         ('q', 'tag'),
@@ -807,7 +807,7 @@ class PowerPanelFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class PowerFeedFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class PowerFeedFilterForm(CustomFieldModelFilterForm):
     model = PowerFeed
     model = PowerFeed
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],

+ 25 - 25
netbox/dcim/forms/models.py

@@ -66,7 +66,7 @@ Tagged (All): Implies all VLANs are available (w/optional untagged VLAN)
 """
 """
 
 
 
 
-class RegionForm(BootstrapMixin, CustomFieldModelForm):
+class RegionForm(CustomFieldModelForm):
     parent = DynamicModelChoiceField(
     parent = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False
         required=False
@@ -84,7 +84,7 @@ class RegionForm(BootstrapMixin, CustomFieldModelForm):
         )
         )
 
 
 
 
-class SiteGroupForm(BootstrapMixin, CustomFieldModelForm):
+class SiteGroupForm(CustomFieldModelForm):
     parent = DynamicModelChoiceField(
     parent = DynamicModelChoiceField(
         queryset=SiteGroup.objects.all(),
         queryset=SiteGroup.objects.all(),
         required=False
         required=False
@@ -102,7 +102,7 @@ class SiteGroupForm(BootstrapMixin, CustomFieldModelForm):
         )
         )
 
 
 
 
-class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class SiteForm(TenancyForm, CustomFieldModelForm):
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False
         required=False
@@ -173,7 +173,7 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         }
         }
 
 
 
 
-class LocationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class LocationForm(TenancyForm, CustomFieldModelForm):
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False,
         required=False,
@@ -221,7 +221,7 @@ class LocationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         )
         )
 
 
 
 
-class RackRoleForm(BootstrapMixin, CustomFieldModelForm):
+class RackRoleForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -235,7 +235,7 @@ class RackRoleForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
 
 
 
 
-class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class RackForm(TenancyForm, CustomFieldModelForm):
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False,
         required=False,
@@ -295,7 +295,7 @@ class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         }
         }
 
 
 
 
-class RackReservationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class RackReservationForm(TenancyForm, CustomFieldModelForm):
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False,
         required=False,
@@ -365,7 +365,7 @@ class RackReservationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         )
         )
 
 
 
 
-class ManufacturerForm(BootstrapMixin, CustomFieldModelForm):
+class ManufacturerForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -379,7 +379,7 @@ class ManufacturerForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
 
 
 
 
-class DeviceTypeForm(BootstrapMixin, CustomFieldModelForm):
+class DeviceTypeForm(CustomFieldModelForm):
     manufacturer = DynamicModelChoiceField(
     manufacturer = DynamicModelChoiceField(
         queryset=Manufacturer.objects.all()
         queryset=Manufacturer.objects.all()
     )
     )
@@ -418,7 +418,7 @@ class DeviceTypeForm(BootstrapMixin, CustomFieldModelForm):
         }
         }
 
 
 
 
-class DeviceRoleForm(BootstrapMixin, CustomFieldModelForm):
+class DeviceRoleForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -432,7 +432,7 @@ class DeviceRoleForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
 
 
 
 
-class PlatformForm(BootstrapMixin, CustomFieldModelForm):
+class PlatformForm(CustomFieldModelForm):
     manufacturer = DynamicModelChoiceField(
     manufacturer = DynamicModelChoiceField(
         queryset=Manufacturer.objects.all(),
         queryset=Manufacturer.objects.all(),
         required=False
         required=False
@@ -455,7 +455,7 @@ class PlatformForm(BootstrapMixin, CustomFieldModelForm):
         }
         }
 
 
 
 
-class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class DeviceForm(TenancyForm, CustomFieldModelForm):
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False,
         required=False,
@@ -637,7 +637,7 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
             self.fields['position'].widget.choices = [(position, f'U{position}')]
             self.fields['position'].widget.choices = [(position, f'U{position}')]
 
 
 
 
-class CableForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class CableForm(TenancyForm, CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -660,7 +660,7 @@ class CableForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         }
         }
 
 
 
 
-class PowerPanelForm(BootstrapMixin, CustomFieldModelForm):
+class PowerPanelForm(CustomFieldModelForm):
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False,
         required=False,
@@ -704,7 +704,7 @@ class PowerPanelForm(BootstrapMixin, CustomFieldModelForm):
         )
         )
 
 
 
 
-class PowerFeedForm(BootstrapMixin, CustomFieldModelForm):
+class PowerFeedForm(CustomFieldModelForm):
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False,
         required=False,
@@ -772,7 +772,7 @@ class PowerFeedForm(BootstrapMixin, CustomFieldModelForm):
 # Virtual chassis
 # Virtual chassis
 #
 #
 
 
-class VirtualChassisForm(BootstrapMixin, CustomFieldModelForm):
+class VirtualChassisForm(CustomFieldModelForm):
     master = forms.ModelChoiceField(
     master = forms.ModelChoiceField(
         queryset=Device.objects.all(),
         queryset=Device.objects.all(),
         required=False,
         required=False,
@@ -1005,7 +1005,7 @@ class DeviceBayTemplateForm(BootstrapMixin, forms.ModelForm):
 # Device components
 # Device components
 #
 #
 
 
-class ConsolePortForm(BootstrapMixin, CustomFieldModelForm):
+class ConsolePortForm(CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -1021,7 +1021,7 @@ class ConsolePortForm(BootstrapMixin, CustomFieldModelForm):
         }
         }
 
 
 
 
-class ConsoleServerPortForm(BootstrapMixin, CustomFieldModelForm):
+class ConsoleServerPortForm(CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -1037,7 +1037,7 @@ class ConsoleServerPortForm(BootstrapMixin, CustomFieldModelForm):
         }
         }
 
 
 
 
-class PowerPortForm(BootstrapMixin, CustomFieldModelForm):
+class PowerPortForm(CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -1054,7 +1054,7 @@ class PowerPortForm(BootstrapMixin, CustomFieldModelForm):
         }
         }
 
 
 
 
-class PowerOutletForm(BootstrapMixin, CustomFieldModelForm):
+class PowerOutletForm(CustomFieldModelForm):
     power_port = forms.ModelChoiceField(
     power_port = forms.ModelChoiceField(
         queryset=PowerPort.objects.all(),
         queryset=PowerPort.objects.all(),
         required=False
         required=False
@@ -1083,7 +1083,7 @@ class PowerOutletForm(BootstrapMixin, CustomFieldModelForm):
             )
             )
 
 
 
 
-class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm):
+class InterfaceForm(InterfaceCommonForm, CustomFieldModelForm):
     parent = DynamicModelChoiceField(
     parent = DynamicModelChoiceField(
         queryset=Interface.objects.all(),
         queryset=Interface.objects.all(),
         required=False,
         required=False,
@@ -1183,7 +1183,7 @@ class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm):
         self.fields['tagged_vlans'].widget.add_query_param('available_on_device', device.pk)
         self.fields['tagged_vlans'].widget.add_query_param('available_on_device', device.pk)
 
 
 
 
-class FrontPortForm(BootstrapMixin, CustomFieldModelForm):
+class FrontPortForm(CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -1211,7 +1211,7 @@ class FrontPortForm(BootstrapMixin, CustomFieldModelForm):
             )
             )
 
 
 
 
-class RearPortForm(BootstrapMixin, CustomFieldModelForm):
+class RearPortForm(CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -1228,7 +1228,7 @@ class RearPortForm(BootstrapMixin, CustomFieldModelForm):
         }
         }
 
 
 
 
-class DeviceBayForm(BootstrapMixin, CustomFieldModelForm):
+class DeviceBayForm(CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -1264,7 +1264,7 @@ class PopulateDeviceBayForm(BootstrapMixin, forms.Form):
         ).exclude(pk=device_bay.device.pk)
         ).exclude(pk=device_bay.device.pk)
 
 
 
 
-class InventoryItemForm(BootstrapMixin, CustomFieldModelForm):
+class InventoryItemForm(CustomFieldModelForm):
     device = DynamicModelChoiceField(
     device = DynamicModelChoiceField(
         queryset=Device.objects.all()
         queryset=Device.objects.all()
     )
     )

+ 4 - 4
netbox/dcim/forms/object_create.py

@@ -35,7 +35,7 @@ __all__ = (
 )
 )
 
 
 
 
-class ComponentForm(forms.Form):
+class ComponentForm(BootstrapMixin, forms.Form):
     """
     """
     Subclass this form when facilitating the creation of one or more device component or component templates based on
     Subclass this form when facilitating the creation of one or more device component or component templates based on
     a name pattern.
     a name pattern.
@@ -63,7 +63,7 @@ class ComponentForm(forms.Form):
                 }, code='label_pattern_mismatch')
                 }, code='label_pattern_mismatch')
 
 
 
 
-class VirtualChassisCreateForm(BootstrapMixin, CustomFieldModelForm):
+class VirtualChassisCreateForm(CustomFieldModelForm):
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
         required=False,
         required=False,
@@ -142,7 +142,7 @@ class VirtualChassisCreateForm(BootstrapMixin, CustomFieldModelForm):
 # Component templates
 # Component templates
 #
 #
 
 
-class ComponentTemplateCreateForm(BootstrapMixin, ComponentForm):
+class ComponentTemplateCreateForm(ComponentForm):
     """
     """
     Base form for the creation of device component templates (subclassed from ComponentTemplateModel).
     Base form for the creation of device component templates (subclassed from ComponentTemplateModel).
     """
     """
@@ -335,7 +335,7 @@ class DeviceBayTemplateCreateForm(ComponentTemplateCreateForm):
 # Device components
 # Device components
 #
 #
 
 
-class ComponentCreateForm(BootstrapMixin, CustomFieldsMixin, ComponentForm):
+class ComponentCreateForm(CustomFieldsMixin, ComponentForm):
     """
     """
     Base form for the creation of device components (models subclassed from ComponentModel).
     Base form for the creation of device components (models subclassed from ComponentModel).
     """
     """

+ 8 - 10
netbox/extras/forms/bulk_edit.py

@@ -4,9 +4,7 @@ from django.contrib.contenttypes.models import ContentType
 from extras.choices import *
 from extras.choices import *
 from extras.models import *
 from extras.models import *
 from extras.utils import FeatureQuery
 from extras.utils import FeatureQuery
-from utilities.forms import (
-    BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorField, ContentTypeChoiceField, StaticSelect,
-)
+from utilities.forms import BulkEditForm, BulkEditNullBooleanSelect, ColorField, ContentTypeChoiceField, StaticSelect
 
 
 __all__ = (
 __all__ = (
     'ConfigContextBulkEditForm',
     'ConfigContextBulkEditForm',
@@ -19,7 +17,7 @@ __all__ = (
 )
 )
 
 
 
 
-class CustomFieldBulkEditForm(BootstrapMixin, BulkEditForm):
+class CustomFieldBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=CustomField.objects.all(),
         queryset=CustomField.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -39,7 +37,7 @@ class CustomFieldBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = []
         nullable_fields = []
 
 
 
 
-class CustomLinkBulkEditForm(BootstrapMixin, BulkEditForm):
+class CustomLinkBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=CustomLink.objects.all(),
         queryset=CustomLink.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -66,7 +64,7 @@ class CustomLinkBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = []
         nullable_fields = []
 
 
 
 
-class ExportTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
+class ExportTemplateBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ExportTemplate.objects.all(),
         queryset=ExportTemplate.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -97,7 +95,7 @@ class ExportTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ['description', 'mime_type', 'file_extension']
         nullable_fields = ['description', 'mime_type', 'file_extension']
 
 
 
 
-class WebhookBulkEditForm(BootstrapMixin, BulkEditForm):
+class WebhookBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Webhook.objects.all(),
         queryset=Webhook.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -140,7 +138,7 @@ class WebhookBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ['secret', 'conditions', 'ca_file_path']
         nullable_fields = ['secret', 'conditions', 'ca_file_path']
 
 
 
 
-class TagBulkEditForm(BootstrapMixin, BulkEditForm):
+class TagBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -157,7 +155,7 @@ class TagBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = ['description']
         nullable_fields = ['description']
 
 
 
 
-class ConfigContextBulkEditForm(BootstrapMixin, BulkEditForm):
+class ConfigContextBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ConfigContext.objects.all(),
         queryset=ConfigContext.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -181,7 +179,7 @@ class ConfigContextBulkEditForm(BootstrapMixin, BulkEditForm):
         ]
         ]
 
 
 
 
-class JournalEntryBulkEditForm(BootstrapMixin, BulkEditForm):
+class JournalEntryBulkEditForm(BulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=JournalEntry.objects.all(),
         queryset=JournalEntry.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput

+ 3 - 3
netbox/extras/forms/customfields.py

@@ -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 BulkEditForm, CSVModelForm
+from utilities.forms import BootstrapMixin, BulkEditForm, CSVModelForm
 
 
 __all__ = (
 __all__ = (
     'CustomFieldModelCSVForm',
     'CustomFieldModelCSVForm',
@@ -52,7 +52,7 @@ class CustomFieldsMixin:
             self.custom_fields.append(field_name)
             self.custom_fields.append(field_name)
 
 
 
 
-class CustomFieldModelForm(CustomFieldsMixin, forms.ModelForm):
+class CustomFieldModelForm(BootstrapMixin, CustomFieldsMixin, forms.ModelForm):
     """
     """
     Extend ModelForm to include custom field support.
     Extend ModelForm to include custom field support.
     """
     """
@@ -105,7 +105,7 @@ class CustomFieldModelBulkEditForm(BulkEditForm):
             self.custom_fields.append(cf.name)
             self.custom_fields.append(cf.name)
 
 
 
 
-class CustomFieldModelFilterForm(forms.Form):
+class CustomFieldModelFilterForm(BootstrapMixin, forms.Form):
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
 
 

+ 15 - 15
netbox/ipam/forms/bulk_edit.py

@@ -8,8 +8,8 @@ from ipam.models import *
 from ipam.models import ASN
 from ipam.models import ASN
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from utilities.forms import (
 from utilities.forms import (
-    add_blank_choice, BootstrapMixin, BulkEditNullBooleanSelect, DatePicker, DynamicModelChoiceField, NumericArrayField,
-    StaticSelect, DynamicModelMultipleChoiceField,
+    add_blank_choice, BulkEditNullBooleanSelect, DatePicker, DynamicModelChoiceField, NumericArrayField, StaticSelect,
+    DynamicModelMultipleChoiceField,
 )
 )
 
 
 __all__ = (
 __all__ = (
@@ -29,7 +29,7 @@ __all__ = (
 )
 )
 
 
 
 
-class VRFBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class VRFBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=VRF.objects.all(),
         queryset=VRF.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -54,7 +54,7 @@ class VRFBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEdi
         ]
         ]
 
 
 
 
-class RouteTargetBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class RouteTargetBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=RouteTarget.objects.all(),
         queryset=RouteTarget.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -74,7 +74,7 @@ class RouteTargetBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMode
         ]
         ]
 
 
 
 
-class RIRBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class RIRBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=RIR.objects.all(),
         queryset=RIR.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -92,7 +92,7 @@ class RIRBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEdi
         nullable_fields = ['is_private', 'description']
         nullable_fields = ['is_private', 'description']
 
 
 
 
-class ASNBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ASNBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ASN.objects.all(),
         queryset=ASN.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -124,7 +124,7 @@ class ASNBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEdi
         }
         }
 
 
 
 
-class AggregateBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class AggregateBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Aggregate.objects.all(),
         queryset=Aggregate.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -155,7 +155,7 @@ class AggregateBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelB
         }
         }
 
 
 
 
-class RoleBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class RoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Role.objects.all(),
         queryset=Role.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -172,7 +172,7 @@ class RoleBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
         nullable_fields = ['description']
         nullable_fields = ['description']
 
 
 
 
-class PrefixBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class PrefixBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Prefix.objects.all(),
         queryset=Prefix.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -237,7 +237,7 @@ class PrefixBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk
         ]
         ]
 
 
 
 
-class IPRangeBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class IPRangeBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=IPRange.objects.all(),
         queryset=IPRange.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -271,7 +271,7 @@ class IPRangeBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBul
         ]
         ]
 
 
 
 
-class IPAddressBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class IPAddressBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=IPAddress.objects.all(),
         queryset=IPAddress.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -315,7 +315,7 @@ class IPAddressBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelB
         ]
         ]
 
 
 
 
-class FHRPGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class FHRPGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=FHRPGroup.objects.all(),
         queryset=FHRPGroup.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -350,7 +350,7 @@ class FHRPGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelB
         nullable_fields = ['auth_type', 'auth_key', 'description']
         nullable_fields = ['auth_type', 'auth_key', 'description']
 
 
 
 
-class VLANGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class VLANGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=VLANGroup.objects.all(),
         queryset=VLANGroup.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -368,7 +368,7 @@ class VLANGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelB
         nullable_fields = ['site', 'description']
         nullable_fields = ['site', 'description']
 
 
 
 
-class VLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class VLANBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=VLAN.objects.all(),
         queryset=VLAN.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -420,7 +420,7 @@ class VLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
         ]
         ]
 
 
 
 
-class ServiceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ServiceBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Service.objects.all(),
         queryset=Service.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()

+ 15 - 17
netbox/ipam/forms/filtersets.py

@@ -1,4 +1,3 @@
-import django_filters
 from django import forms
 from django import forms
 from django.utils.translation import gettext as _
 from django.utils.translation import gettext as _
 
 
@@ -9,10 +8,9 @@ from ipam.constants import *
 from ipam.models import *
 from ipam.models import *
 from ipam.models import ASN
 from ipam.models import ASN
 from tenancy.forms import TenancyFilterForm
 from tenancy.forms import TenancyFilterForm
-from tenancy.models import Tenant
 from utilities.forms import (
 from utilities.forms import (
-    add_blank_choice, BootstrapMixin, DynamicModelChoiceField, DynamicModelMultipleChoiceField, StaticSelect,
-    StaticSelectMultiple, TagFilterField, BOOLEAN_WITH_BLANK_CHOICES,
+    add_blank_choice, DynamicModelChoiceField, DynamicModelMultipleChoiceField, StaticSelect, StaticSelectMultiple,
+    TagFilterField, BOOLEAN_WITH_BLANK_CHOICES,
 )
 )
 
 
 __all__ = (
 __all__ = (
@@ -40,7 +38,7 @@ IPADDRESS_MASK_LENGTH_CHOICES = add_blank_choice([
 ])
 ])
 
 
 
 
-class VRFFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class VRFFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = VRF
     model = VRF
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -67,7 +65,7 @@ class VRFFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFor
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class RouteTargetFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class RouteTargetFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = RouteTarget
     model = RouteTarget
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -94,7 +92,7 @@ class RouteTargetFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelF
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class RIRFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class RIRFilterForm(CustomFieldModelFilterForm):
     model = RIR
     model = RIR
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -111,7 +109,7 @@ class RIRFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class AggregateFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class AggregateFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = Aggregate
     model = Aggregate
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -138,7 +136,7 @@ class AggregateFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFil
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class ASNFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class ASNFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = ASN
     model = ASN
     field_groups = [
     field_groups = [
         ['q'],
         ['q'],
@@ -165,7 +163,7 @@ class ASNFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFor
     )
     )
 
 
 
 
-class RoleFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class RoleFilterForm(CustomFieldModelFilterForm):
     model = Role
     model = Role
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -175,7 +173,7 @@ class RoleFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class PrefixFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class PrefixFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = Prefix
     model = Prefix
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -277,7 +275,7 @@ class PrefixFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilter
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class IPRangeFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class IPRangeFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = IPRange
     model = IPRange
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -317,7 +315,7 @@ class IPRangeFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilte
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class IPAddressFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = IPAddress
     model = IPAddress
     field_order = [
     field_order = [
         'q', 'parent', 'family', 'mask_length', 'vrf_id', 'present_in_vrf_id', 'status', 'role',
         'q', 'parent', 'family', 'mask_length', 'vrf_id', 'present_in_vrf_id', 'status', 'role',
@@ -388,7 +386,7 @@ class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFil
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class FHRPGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class FHRPGroupFilterForm(CustomFieldModelFilterForm):
     model = FHRPGroup
     model = FHRPGroup
     field_groups = (
     field_groups = (
         ('q', 'tag'),
         ('q', 'tag'),
@@ -423,7 +421,7 @@ class FHRPGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class VLANGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class VLANGroupFilterForm(CustomFieldModelFilterForm):
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
         ['region', 'sitegroup', 'site', 'location', 'rack']
         ['region', 'sitegroup', 'site', 'location', 'rack']
@@ -467,7 +465,7 @@ class VLANGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class VLANFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = VLAN
     model = VLAN
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],
@@ -531,7 +529,7 @@ class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class ServiceFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ServiceFilterForm(CustomFieldModelFilterForm):
     model = Service
     model = Service
     field_groups = (
     field_groups = (
         ('q', 'tag'),
         ('q', 'tag'),

+ 14 - 14
netbox/ipam/forms/models.py

@@ -37,7 +37,7 @@ __all__ = (
 )
 )
 
 
 
 
-class VRFForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class VRFForm(TenancyForm, CustomFieldModelForm):
     import_targets = DynamicModelMultipleChoiceField(
     import_targets = DynamicModelMultipleChoiceField(
         queryset=RouteTarget.objects.all(),
         queryset=RouteTarget.objects.all(),
         required=False
         required=False
@@ -70,7 +70,7 @@ class VRFForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         }
         }
 
 
 
 
-class RouteTargetForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class RouteTargetForm(TenancyForm, CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -87,7 +87,7 @@ class RouteTargetForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         )
         )
 
 
 
 
-class RIRForm(BootstrapMixin, CustomFieldModelForm):
+class RIRForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -101,7 +101,7 @@ class RIRForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
 
 
 
 
-class AggregateForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class AggregateForm(TenancyForm, CustomFieldModelForm):
     rir = DynamicModelChoiceField(
     rir = DynamicModelChoiceField(
         queryset=RIR.objects.all(),
         queryset=RIR.objects.all(),
         label='RIR'
         label='RIR'
@@ -129,7 +129,7 @@ class AggregateForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         }
         }
 
 
 
 
-class ASNForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class ASNForm(TenancyForm, CustomFieldModelForm):
     rir = DynamicModelChoiceField(
     rir = DynamicModelChoiceField(
         queryset=RIR.objects.all(),
         queryset=RIR.objects.all(),
         label='RIR',
         label='RIR',
@@ -173,7 +173,7 @@ class ASNForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         return instance
         return instance
 
 
 
 
-class RoleForm(BootstrapMixin, CustomFieldModelForm):
+class RoleForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -187,7 +187,7 @@ class RoleForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
 
 
 
 
-class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class PrefixForm(TenancyForm, CustomFieldModelForm):
     vrf = DynamicModelChoiceField(
     vrf = DynamicModelChoiceField(
         queryset=VRF.objects.all(),
         queryset=VRF.objects.all(),
         required=False,
         required=False,
@@ -262,7 +262,7 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         }
         }
 
 
 
 
-class IPRangeForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class IPRangeForm(TenancyForm, CustomFieldModelForm):
     vrf = DynamicModelChoiceField(
     vrf = DynamicModelChoiceField(
         queryset=VRF.objects.all(),
         queryset=VRF.objects.all(),
         required=False,
         required=False,
@@ -291,7 +291,7 @@ class IPRangeForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         }
         }
 
 
 
 
-class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class IPAddressForm(TenancyForm, CustomFieldModelForm):
     device = DynamicModelChoiceField(
     device = DynamicModelChoiceField(
         queryset=Device.objects.all(),
         queryset=Device.objects.all(),
         required=False,
         required=False,
@@ -499,7 +499,7 @@ class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         return ipaddress
         return ipaddress
 
 
 
 
-class IPAddressBulkAddForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class IPAddressBulkAddForm(TenancyForm, CustomFieldModelForm):
     vrf = DynamicModelChoiceField(
     vrf = DynamicModelChoiceField(
         queryset=VRF.objects.all(),
         queryset=VRF.objects.all(),
         required=False,
         required=False,
@@ -533,7 +533,7 @@ class IPAddressAssignForm(BootstrapMixin, forms.Form):
     )
     )
 
 
 
 
-class FHRPGroupForm(BootstrapMixin, CustomFieldModelForm):
+class FHRPGroupForm(CustomFieldModelForm):
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
         required=False
         required=False
@@ -613,7 +613,7 @@ class FHRPGroupAssignmentForm(BootstrapMixin, forms.ModelForm):
             self.fields['group'].widget.add_query_param('related_ip', ipaddress.pk)
             self.fields['group'].widget.add_query_param('related_ip', ipaddress.pk)
 
 
 
 
-class VLANGroupForm(BootstrapMixin, CustomFieldModelForm):
+class VLANGroupForm(CustomFieldModelForm):
     scope_type = ContentTypeChoiceField(
     scope_type = ContentTypeChoiceField(
         queryset=ContentType.objects.filter(model__in=VLANGROUP_SCOPE_TYPES),
         queryset=ContentType.objects.filter(model__in=VLANGROUP_SCOPE_TYPES),
         required=False,
         required=False,
@@ -720,7 +720,7 @@ class VLANGroupForm(BootstrapMixin, CustomFieldModelForm):
             self.instance.scope_id = None
             self.instance.scope_id = None
 
 
 
 
-class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class VLANForm(TenancyForm, CustomFieldModelForm):
     # VLANGroup assignment fields
     # VLANGroup assignment fields
     scope_type = forms.ChoiceField(
     scope_type = forms.ChoiceField(
         choices=(
         choices=(
@@ -801,7 +801,7 @@ class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         }
         }
 
 
 
 
-class ServiceForm(BootstrapMixin, CustomFieldModelForm):
+class ServiceForm(CustomFieldModelForm):
     ports = NumericArrayField(
     ports = NumericArrayField(
         base_field=forms.IntegerField(
         base_field=forms.IntegerField(
             min_value=SERVICE_PORT_MIN,
             min_value=SERVICE_PORT_MIN,

+ 6 - 6
netbox/tenancy/forms/bulk_edit.py

@@ -2,7 +2,7 @@ from django import forms
 
 
 from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
 from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
 from tenancy.models import *
 from tenancy.models import *
-from utilities.forms import BootstrapMixin, DynamicModelChoiceField
+from utilities.forms import DynamicModelChoiceField
 
 
 __all__ = (
 __all__ = (
     'ContactBulkEditForm',
     'ContactBulkEditForm',
@@ -17,7 +17,7 @@ __all__ = (
 # Tenants
 # Tenants
 #
 #
 
 
-class TenantGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class TenantGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=TenantGroup.objects.all(),
         queryset=TenantGroup.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -35,7 +35,7 @@ class TenantGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMode
         nullable_fields = ['parent', 'description']
         nullable_fields = ['parent', 'description']
 
 
 
 
-class TenantBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class TenantBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Tenant.objects.all(),
         queryset=Tenant.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -55,7 +55,7 @@ class TenantBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk
 # Contacts
 # Contacts
 #
 #
 
 
-class ContactGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ContactGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ContactGroup.objects.all(),
         queryset=ContactGroup.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -73,7 +73,7 @@ class ContactGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMod
         nullable_fields = ['parent', 'description']
         nullable_fields = ['parent', 'description']
 
 
 
 
-class ContactRoleBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ContactRoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ContactRole.objects.all(),
         queryset=ContactRole.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -87,7 +87,7 @@ class ContactRoleBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMode
         nullable_fields = ['description']
         nullable_fields = ['description']
 
 
 
 
-class ContactBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ContactBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Contact.objects.all(),
         queryset=Contact.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()

+ 6 - 6
netbox/tenancy/forms/filtersets.py

@@ -3,7 +3,7 @@ from django.utils.translation import gettext as _
 
 
 from extras.forms import CustomFieldModelFilterForm
 from extras.forms import CustomFieldModelFilterForm
 from tenancy.models import *
 from tenancy.models import *
-from utilities.forms import BootstrapMixin, DynamicModelMultipleChoiceField, TagFilterField
+from utilities.forms import DynamicModelMultipleChoiceField, TagFilterField
 
 
 __all__ = (
 __all__ = (
     'ContactFilterForm',
     'ContactFilterForm',
@@ -18,7 +18,7 @@ __all__ = (
 # Tenants
 # Tenants
 #
 #
 
 
-class TenantGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class TenantGroupFilterForm(CustomFieldModelFilterForm):
     model = TenantGroup
     model = TenantGroup
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -34,7 +34,7 @@ class TenantGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class TenantFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class TenantFilterForm(CustomFieldModelFilterForm):
     model = Tenant
     model = Tenant
     field_groups = (
     field_groups = (
         ('q', 'tag'),
         ('q', 'tag'),
@@ -59,7 +59,7 @@ class TenantFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
 # Contacts
 # Contacts
 #
 #
 
 
-class ContactGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ContactGroupFilterForm(CustomFieldModelFilterForm):
     model = ContactGroup
     model = ContactGroup
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -75,7 +75,7 @@ class ContactGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class ContactRoleFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ContactRoleFilterForm(CustomFieldModelFilterForm):
     model = ContactRole
     model = ContactRole
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -85,7 +85,7 @@ class ContactRoleFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class ContactFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ContactFilterForm(CustomFieldModelFilterForm):
     model = Contact
     model = Contact
     field_groups = (
     field_groups = (
         ('q', 'tag'),
         ('q', 'tag'),

+ 5 - 5
netbox/tenancy/forms/models.py

@@ -22,7 +22,7 @@ __all__ = (
 # Tenants
 # Tenants
 #
 #
 
 
-class TenantGroupForm(BootstrapMixin, CustomFieldModelForm):
+class TenantGroupForm(CustomFieldModelForm):
     parent = DynamicModelChoiceField(
     parent = DynamicModelChoiceField(
         queryset=TenantGroup.objects.all(),
         queryset=TenantGroup.objects.all(),
         required=False
         required=False
@@ -40,7 +40,7 @@ class TenantGroupForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
 
 
 
 
-class TenantForm(BootstrapMixin, CustomFieldModelForm):
+class TenantForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     group = DynamicModelChoiceField(
     group = DynamicModelChoiceField(
         queryset=TenantGroup.objects.all(),
         queryset=TenantGroup.objects.all(),
@@ -66,7 +66,7 @@ class TenantForm(BootstrapMixin, CustomFieldModelForm):
 # Contacts
 # Contacts
 #
 #
 
 
-class ContactGroupForm(BootstrapMixin, CustomFieldModelForm):
+class ContactGroupForm(CustomFieldModelForm):
     parent = DynamicModelChoiceField(
     parent = DynamicModelChoiceField(
         queryset=ContactGroup.objects.all(),
         queryset=ContactGroup.objects.all(),
         required=False
         required=False
@@ -82,7 +82,7 @@ class ContactGroupForm(BootstrapMixin, CustomFieldModelForm):
         fields = ('parent', 'name', 'slug', 'description', 'tags')
         fields = ('parent', 'name', 'slug', 'description', 'tags')
 
 
 
 
-class ContactRoleForm(BootstrapMixin, CustomFieldModelForm):
+class ContactRoleForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -94,7 +94,7 @@ class ContactRoleForm(BootstrapMixin, CustomFieldModelForm):
         fields = ('name', 'slug', 'description', 'tags')
         fields = ('name', 'slug', 'description', 'tags')
 
 
 
 
-class ContactForm(BootstrapMixin, CustomFieldModelForm):
+class ContactForm(CustomFieldModelForm):
     group = DynamicModelChoiceField(
     group = DynamicModelChoiceField(
         queryset=ContactGroup.objects.all(),
         queryset=ContactGroup.objects.all(),
         required=False
         required=False

+ 2 - 2
netbox/utilities/forms/forms.py

@@ -19,7 +19,7 @@ __all__ = (
 )
 )
 
 
 
 
-class BootstrapMixin(forms.BaseForm):
+class BootstrapMixin:
     """
     """
     Add the base Bootstrap CSS classes to form elements.
     Add the base Bootstrap CSS classes to form elements.
     """
     """
@@ -73,7 +73,7 @@ class ConfirmationForm(BootstrapMixin, ReturnURLForm):
     confirm = forms.BooleanField(required=True, widget=forms.HiddenInput(), initial=True)
     confirm = forms.BooleanField(required=True, widget=forms.HiddenInput(), initial=True)
 
 
 
 
-class BulkEditForm(forms.Form):
+class BulkEditForm(BootstrapMixin, forms.Form):
     """
     """
     Base form for editing multiple objects in bulk
     Base form for editing multiple objects in bulk
     """
     """

+ 6 - 6
netbox/virtualization/forms/bulk_edit.py

@@ -7,7 +7,7 @@ from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
 from ipam.models import VLAN
 from ipam.models import VLAN
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from utilities.forms import (
 from utilities.forms import (
-    add_blank_choice, BootstrapMixin, BulkEditNullBooleanSelect, BulkRenameForm, CommentField, DynamicModelChoiceField,
+    add_blank_choice, BulkEditNullBooleanSelect, BulkRenameForm, CommentField, DynamicModelChoiceField,
     DynamicModelMultipleChoiceField, SmallTextarea, StaticSelect
     DynamicModelMultipleChoiceField, SmallTextarea, StaticSelect
 )
 )
 from virtualization.choices import *
 from virtualization.choices import *
@@ -23,7 +23,7 @@ __all__ = (
 )
 )
 
 
 
 
-class ClusterTypeBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ClusterTypeBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ClusterType.objects.all(),
         queryset=ClusterType.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -37,7 +37,7 @@ class ClusterTypeBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMode
         nullable_fields = ['description']
         nullable_fields = ['description']
 
 
 
 
-class ClusterGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ClusterGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=ClusterGroup.objects.all(),
         queryset=ClusterGroup.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -51,7 +51,7 @@ class ClusterGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMod
         nullable_fields = ['description']
         nullable_fields = ['description']
 
 
 
 
-class ClusterBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class ClusterBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=Cluster.objects.all(),
         queryset=Cluster.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -95,7 +95,7 @@ class ClusterBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBul
         ]
         ]
 
 
 
 
-class VirtualMachineBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class VirtualMachineBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=VirtualMachine.objects.all(),
         queryset=VirtualMachine.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()
@@ -150,7 +150,7 @@ class VirtualMachineBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldM
         ]
         ]
 
 
 
 
-class VMInterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class VMInterfaceBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=VMInterface.objects.all(),
         queryset=VMInterface.objects.all(),
         widget=forms.MultipleHiddenInput()
         widget=forms.MultipleHiddenInput()

+ 4 - 9
netbox/virtualization/forms/filtersets.py

@@ -20,7 +20,7 @@ __all__ = (
 )
 )
 
 
 
 
-class ClusterTypeFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ClusterTypeFilterForm(CustomFieldModelFilterForm):
     model = ClusterType
     model = ClusterType
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -30,7 +30,7 @@ class ClusterTypeFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class ClusterGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class ClusterGroupFilterForm(CustomFieldModelFilterForm):
     model = ClusterGroup
     model = ClusterGroup
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -40,7 +40,7 @@ class ClusterGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class ClusterFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterForm):
+class ClusterFilterForm(TenancyFilterForm, CustomFieldModelFilterForm):
     model = Cluster
     model = Cluster
     field_order = [
     field_order = [
         'q', 'type_id', 'region_id', 'site_id', 'group_id', 'tenant_group_id', 'tenant_id',
         'q', 'type_id', 'region_id', 'site_id', 'group_id', 'tenant_group_id', 'tenant_id',
@@ -95,12 +95,7 @@ class ClusterFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilte
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class VirtualMachineFilterForm(
-    BootstrapMixin,
-    LocalConfigContextFilterForm,
-    TenancyFilterForm,
-    CustomFieldModelFilterForm
-):
+class VirtualMachineFilterForm(LocalConfigContextFilterForm, TenancyFilterForm, CustomFieldModelFilterForm):
     model = VirtualMachine
     model = VirtualMachine
     field_groups = [
     field_groups = [
         ['q', 'tag'],
         ['q', 'tag'],

+ 5 - 5
netbox/virtualization/forms/models.py

@@ -26,7 +26,7 @@ __all__ = (
 )
 )
 
 
 
 
-class ClusterTypeForm(BootstrapMixin, CustomFieldModelForm):
+class ClusterTypeForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -40,7 +40,7 @@ class ClusterTypeForm(BootstrapMixin, CustomFieldModelForm):
         )
         )
 
 
 
 
-class ClusterGroupForm(BootstrapMixin, CustomFieldModelForm):
+class ClusterGroupForm(CustomFieldModelForm):
     slug = SlugField()
     slug = SlugField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -54,7 +54,7 @@ class ClusterGroupForm(BootstrapMixin, CustomFieldModelForm):
         )
         )
 
 
 
 
-class ClusterForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class ClusterForm(TenancyForm, CustomFieldModelForm):
     type = DynamicModelChoiceField(
     type = DynamicModelChoiceField(
         queryset=ClusterType.objects.all()
         queryset=ClusterType.objects.all()
     )
     )
@@ -171,7 +171,7 @@ class ClusterRemoveDevicesForm(ConfirmationForm):
     )
     )
 
 
 
 
-class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
+class VirtualMachineForm(TenancyForm, CustomFieldModelForm):
     cluster_group = DynamicModelChoiceField(
     cluster_group = DynamicModelChoiceField(
         queryset=ClusterGroup.objects.all(),
         queryset=ClusterGroup.objects.all(),
         required=False,
         required=False,
@@ -271,7 +271,7 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
             self.fields['primary_ip6'].widget.attrs['readonly'] = True
             self.fields['primary_ip6'].widget.attrs['readonly'] = True
 
 
 
 
-class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm):
+class VMInterfaceForm(InterfaceCommonForm, CustomFieldModelForm):
     parent = DynamicModelChoiceField(
     parent = DynamicModelChoiceField(
         queryset=VMInterface.objects.all(),
         queryset=VMInterface.objects.all(),
         required=False,
         required=False,

+ 4 - 4
netbox/wireless/forms/bulk_edit.py

@@ -3,7 +3,7 @@ from django import forms
 from dcim.choices import LinkStatusChoices
 from dcim.choices import LinkStatusChoices
 from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
 from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
 from ipam.models import VLAN
 from ipam.models import VLAN
-from utilities.forms import BootstrapMixin, DynamicModelChoiceField
+from utilities.forms import DynamicModelChoiceField
 from wireless.choices import *
 from wireless.choices import *
 from wireless.constants import SSID_MAX_LENGTH
 from wireless.constants import SSID_MAX_LENGTH
 from wireless.models import *
 from wireless.models import *
@@ -15,7 +15,7 @@ __all__ = (
 )
 )
 
 
 
 
-class WirelessLANGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class WirelessLANGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=WirelessLANGroup.objects.all(),
         queryset=WirelessLANGroup.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -33,7 +33,7 @@ class WirelessLANGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFiel
         nullable_fields = ['parent', 'description']
         nullable_fields = ['parent', 'description']
 
 
 
 
-class WirelessLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class WirelessLANBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=WirelessLAN.objects.all(),
         queryset=WirelessLAN.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput
@@ -69,7 +69,7 @@ class WirelessLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMode
         nullable_fields = ['ssid', 'group', 'vlan', 'description', 'auth_type', 'auth_cipher', 'auth_psk']
         nullable_fields = ['ssid', 'group', 'vlan', 'description', 'auth_type', 'auth_cipher', 'auth_psk']
 
 
 
 
-class WirelessLinkBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
+class WirelessLinkBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
     pk = forms.ModelMultipleChoiceField(
     pk = forms.ModelMultipleChoiceField(
         queryset=WirelessLink.objects.all(),
         queryset=WirelessLink.objects.all(),
         widget=forms.MultipleHiddenInput
         widget=forms.MultipleHiddenInput

+ 4 - 6
netbox/wireless/forms/filtersets.py

@@ -3,9 +3,7 @@ from django.utils.translation import gettext as _
 
 
 from dcim.choices import LinkStatusChoices
 from dcim.choices import LinkStatusChoices
 from extras.forms import CustomFieldModelFilterForm
 from extras.forms import CustomFieldModelFilterForm
-from utilities.forms import (
-    add_blank_choice, BootstrapMixin, DynamicModelMultipleChoiceField, StaticSelect, TagFilterField,
-)
+from utilities.forms import add_blank_choice, DynamicModelMultipleChoiceField, StaticSelect, TagFilterField
 from wireless.choices import *
 from wireless.choices import *
 from wireless.models import *
 from wireless.models import *
 
 
@@ -16,7 +14,7 @@ __all__ = (
 )
 )
 
 
 
 
-class WirelessLANGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class WirelessLANGroupFilterForm(CustomFieldModelFilterForm):
     model = WirelessLANGroup
     model = WirelessLANGroup
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,
@@ -32,7 +30,7 @@ class WirelessLANGroupFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class WirelessLANFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class WirelessLANFilterForm(CustomFieldModelFilterForm):
     model = WirelessLAN
     model = WirelessLAN
     field_groups = [
     field_groups = [
         ('q', 'tag'),
         ('q', 'tag'),
@@ -70,7 +68,7 @@ class WirelessLANFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
 
 
-class WirelessLinkFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
+class WirelessLinkFilterForm(CustomFieldModelFilterForm):
     model = WirelessLink
     model = WirelessLink
     q = forms.CharField(
     q = forms.CharField(
         required=False,
         required=False,

+ 4 - 6
netbox/wireless/forms/models.py

@@ -2,9 +2,7 @@ from dcim.models import Device, Interface, Location, Site
 from extras.forms import CustomFieldModelForm
 from extras.forms import CustomFieldModelForm
 from extras.models import Tag
 from extras.models import Tag
 from ipam.models import VLAN
 from ipam.models import VLAN
-from utilities.forms import (
-    BootstrapMixin, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField, StaticSelect,
-)
+from utilities.forms import DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField, StaticSelect
 from wireless.models import *
 from wireless.models import *
 
 
 __all__ = (
 __all__ = (
@@ -14,7 +12,7 @@ __all__ = (
 )
 )
 
 
 
 
-class WirelessLANGroupForm(BootstrapMixin, CustomFieldModelForm):
+class WirelessLANGroupForm(CustomFieldModelForm):
     parent = DynamicModelChoiceField(
     parent = DynamicModelChoiceField(
         queryset=WirelessLANGroup.objects.all(),
         queryset=WirelessLANGroup.objects.all(),
         required=False
         required=False
@@ -32,7 +30,7 @@ class WirelessLANGroupForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
 
 
 
 
-class WirelessLANForm(BootstrapMixin, CustomFieldModelForm):
+class WirelessLANForm(CustomFieldModelForm):
     group = DynamicModelChoiceField(
     group = DynamicModelChoiceField(
         queryset=WirelessLANGroup.objects.all(),
         queryset=WirelessLANGroup.objects.all(),
         required=False
         required=False
@@ -63,7 +61,7 @@ class WirelessLANForm(BootstrapMixin, CustomFieldModelForm):
         }
         }
 
 
 
 
-class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm):
+class WirelessLinkForm(CustomFieldModelForm):
     site_a = DynamicModelChoiceField(
     site_a = DynamicModelChoiceField(
         queryset=Site.objects.all(),
         queryset=Site.objects.all(),
         required=False,
         required=False,