From c210c6937bab0ae5739fd98b689ddeb5af9fb477 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Thu, 18 Nov 2021 16:19:25 -0500 Subject: [PATCH] Apply BootstrapMixin to CustomFieldModelForm --- netbox/circuits/forms/models.py | 8 ++--- netbox/dcim/forms/connections.py | 6 ++-- netbox/dcim/forms/models.py | 50 +++++++++++++-------------- netbox/dcim/forms/object_create.py | 2 +- netbox/extras/forms/customfields.py | 4 +-- netbox/ipam/forms/models.py | 28 +++++++-------- netbox/tenancy/forms/models.py | 10 +++--- netbox/utilities/forms/forms.py | 2 +- netbox/virtualization/forms/models.py | 10 +++--- netbox/wireless/forms/models.py | 6 ++-- 10 files changed, 63 insertions(+), 63 deletions(-) diff --git a/netbox/circuits/forms/models.py b/netbox/circuits/forms/models.py index 5679dbc94..2ea246fd0 100644 --- a/netbox/circuits/forms/models.py +++ b/netbox/circuits/forms/models.py @@ -19,7 +19,7 @@ __all__ = ( ) -class ProviderForm(BootstrapMixin, CustomFieldModelForm): +class ProviderForm(CustomFieldModelForm): slug = SlugField() comments = CommentField() tags = DynamicModelMultipleChoiceField( @@ -53,7 +53,7 @@ class ProviderForm(BootstrapMixin, CustomFieldModelForm): } -class ProviderNetworkForm(BootstrapMixin, CustomFieldModelForm): +class ProviderNetworkForm(CustomFieldModelForm): provider = DynamicModelChoiceField( queryset=Provider.objects.all() ) @@ -73,7 +73,7 @@ class ProviderNetworkForm(BootstrapMixin, CustomFieldModelForm): ) -class CircuitTypeForm(BootstrapMixin, CustomFieldModelForm): +class CircuitTypeForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -87,7 +87,7 @@ class CircuitTypeForm(BootstrapMixin, CustomFieldModelForm): ] -class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class CircuitForm(TenancyForm, CustomFieldModelForm): provider = DynamicModelChoiceField( queryset=Provider.objects.all() ) diff --git a/netbox/dcim/forms/connections.py b/netbox/dcim/forms/connections.py index 4e5a64486..7fc1103c8 100644 --- a/netbox/dcim/forms/connections.py +++ b/netbox/dcim/forms/connections.py @@ -18,7 +18,7 @@ __all__ = ( ) -class ConnectCableToDeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class ConnectCableToDeviceForm(TenancyForm, CustomFieldModelForm): """ 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( queryset=Provider.objects.all(), label='Provider', @@ -229,7 +229,7 @@ class ConnectCableToCircuitTerminationForm(BootstrapMixin, TenancyForm, CustomFi return getattr(self.cleaned_data['termination_b_id'], 'pk', None) -class ConnectCableToPowerFeedForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class ConnectCableToPowerFeedForm(TenancyForm, CustomFieldModelForm): termination_b_region = DynamicModelChoiceField( queryset=Region.objects.all(), label='Region', diff --git a/netbox/dcim/forms/models.py b/netbox/dcim/forms/models.py index 36c349740..db2f58a63 100644 --- a/netbox/dcim/forms/models.py +++ b/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( queryset=Region.objects.all(), required=False @@ -84,7 +84,7 @@ class RegionForm(BootstrapMixin, CustomFieldModelForm): ) -class SiteGroupForm(BootstrapMixin, CustomFieldModelForm): +class SiteGroupForm(CustomFieldModelForm): parent = DynamicModelChoiceField( queryset=SiteGroup.objects.all(), required=False @@ -102,7 +102,7 @@ class SiteGroupForm(BootstrapMixin, CustomFieldModelForm): ) -class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class SiteForm(TenancyForm, CustomFieldModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), required=False @@ -173,7 +173,7 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } -class LocationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class LocationForm(TenancyForm, CustomFieldModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), required=False, @@ -221,7 +221,7 @@ class LocationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): ) -class RackRoleForm(BootstrapMixin, CustomFieldModelForm): +class RackRoleForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -235,7 +235,7 @@ class RackRoleForm(BootstrapMixin, CustomFieldModelForm): ] -class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class RackForm(TenancyForm, CustomFieldModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), required=False, @@ -295,7 +295,7 @@ class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } -class RackReservationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class RackReservationForm(TenancyForm, CustomFieldModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), required=False, @@ -365,7 +365,7 @@ class RackReservationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): ) -class ManufacturerForm(BootstrapMixin, CustomFieldModelForm): +class ManufacturerForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -379,7 +379,7 @@ class ManufacturerForm(BootstrapMixin, CustomFieldModelForm): ] -class DeviceTypeForm(BootstrapMixin, CustomFieldModelForm): +class DeviceTypeForm(CustomFieldModelForm): manufacturer = DynamicModelChoiceField( queryset=Manufacturer.objects.all() ) @@ -418,7 +418,7 @@ class DeviceTypeForm(BootstrapMixin, CustomFieldModelForm): } -class DeviceRoleForm(BootstrapMixin, CustomFieldModelForm): +class DeviceRoleForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -432,7 +432,7 @@ class DeviceRoleForm(BootstrapMixin, CustomFieldModelForm): ] -class PlatformForm(BootstrapMixin, CustomFieldModelForm): +class PlatformForm(CustomFieldModelForm): manufacturer = DynamicModelChoiceField( queryset=Manufacturer.objects.all(), required=False @@ -455,7 +455,7 @@ class PlatformForm(BootstrapMixin, CustomFieldModelForm): } -class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class DeviceForm(TenancyForm, CustomFieldModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), required=False, @@ -637,7 +637,7 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): self.fields['position'].widget.choices = [(position, f'U{position}')] -class CableForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class CableForm(TenancyForm, CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -660,7 +660,7 @@ class CableForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } -class PowerPanelForm(BootstrapMixin, CustomFieldModelForm): +class PowerPanelForm(CustomFieldModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), required=False, @@ -704,7 +704,7 @@ class PowerPanelForm(BootstrapMixin, CustomFieldModelForm): ) -class PowerFeedForm(BootstrapMixin, CustomFieldModelForm): +class PowerFeedForm(CustomFieldModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), required=False, @@ -772,7 +772,7 @@ class PowerFeedForm(BootstrapMixin, CustomFieldModelForm): # Virtual chassis # -class VirtualChassisForm(BootstrapMixin, CustomFieldModelForm): +class VirtualChassisForm(CustomFieldModelForm): master = forms.ModelChoiceField( queryset=Device.objects.all(), required=False, @@ -1005,7 +1005,7 @@ class DeviceBayTemplateForm(BootstrapMixin, forms.ModelForm): # Device components # -class ConsolePortForm(BootstrapMixin, CustomFieldModelForm): +class ConsolePortForm(CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -1021,7 +1021,7 @@ class ConsolePortForm(BootstrapMixin, CustomFieldModelForm): } -class ConsoleServerPortForm(BootstrapMixin, CustomFieldModelForm): +class ConsoleServerPortForm(CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -1037,7 +1037,7 @@ class ConsoleServerPortForm(BootstrapMixin, CustomFieldModelForm): } -class PowerPortForm(BootstrapMixin, CustomFieldModelForm): +class PowerPortForm(CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -1054,7 +1054,7 @@ class PowerPortForm(BootstrapMixin, CustomFieldModelForm): } -class PowerOutletForm(BootstrapMixin, CustomFieldModelForm): +class PowerOutletForm(CustomFieldModelForm): power_port = forms.ModelChoiceField( queryset=PowerPort.objects.all(), required=False @@ -1083,7 +1083,7 @@ class PowerOutletForm(BootstrapMixin, CustomFieldModelForm): ) -class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm): +class InterfaceForm(InterfaceCommonForm, CustomFieldModelForm): parent = DynamicModelChoiceField( queryset=Interface.objects.all(), required=False, @@ -1183,7 +1183,7 @@ class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm): self.fields['tagged_vlans'].widget.add_query_param('available_on_device', device.pk) -class FrontPortForm(BootstrapMixin, CustomFieldModelForm): +class FrontPortForm(CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -1211,7 +1211,7 @@ class FrontPortForm(BootstrapMixin, CustomFieldModelForm): ) -class RearPortForm(BootstrapMixin, CustomFieldModelForm): +class RearPortForm(CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -1228,7 +1228,7 @@ class RearPortForm(BootstrapMixin, CustomFieldModelForm): } -class DeviceBayForm(BootstrapMixin, CustomFieldModelForm): +class DeviceBayForm(CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -1264,7 +1264,7 @@ class PopulateDeviceBayForm(BootstrapMixin, forms.Form): ).exclude(pk=device_bay.device.pk) -class InventoryItemForm(BootstrapMixin, CustomFieldModelForm): +class InventoryItemForm(CustomFieldModelForm): device = DynamicModelChoiceField( queryset=Device.objects.all() ) diff --git a/netbox/dcim/forms/object_create.py b/netbox/dcim/forms/object_create.py index 1e347576a..c7f87677a 100644 --- a/netbox/dcim/forms/object_create.py +++ b/netbox/dcim/forms/object_create.py @@ -63,7 +63,7 @@ class ComponentForm(forms.Form): }, code='label_pattern_mismatch') -class VirtualChassisCreateForm(BootstrapMixin, CustomFieldModelForm): +class VirtualChassisCreateForm(CustomFieldModelForm): region = DynamicModelChoiceField( queryset=Region.objects.all(), required=False, diff --git a/netbox/extras/forms/customfields.py b/netbox/extras/forms/customfields.py index 4e01b7bef..bbd2e91f8 100644 --- a/netbox/extras/forms/customfields.py +++ b/netbox/extras/forms/customfields.py @@ -4,7 +4,7 @@ from django.db.models import Q from extras.choices import * from extras.models import * -from utilities.forms import BulkEditForm, CSVModelForm +from utilities.forms import BootstrapMixin, BulkEditForm, CSVModelForm __all__ = ( 'CustomFieldModelCSVForm', @@ -52,7 +52,7 @@ class CustomFieldsMixin: self.custom_fields.append(field_name) -class CustomFieldModelForm(CustomFieldsMixin, forms.ModelForm): +class CustomFieldModelForm(BootstrapMixin, CustomFieldsMixin, forms.ModelForm): """ Extend ModelForm to include custom field support. """ diff --git a/netbox/ipam/forms/models.py b/netbox/ipam/forms/models.py index baa5e738a..aa2fa3214 100644 --- a/netbox/ipam/forms/models.py +++ b/netbox/ipam/forms/models.py @@ -37,7 +37,7 @@ __all__ = ( ) -class VRFForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class VRFForm(TenancyForm, CustomFieldModelForm): import_targets = DynamicModelMultipleChoiceField( queryset=RouteTarget.objects.all(), required=False @@ -70,7 +70,7 @@ class VRFForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } -class RouteTargetForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class RouteTargetForm(TenancyForm, CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -87,7 +87,7 @@ class RouteTargetForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): ) -class RIRForm(BootstrapMixin, CustomFieldModelForm): +class RIRForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -101,7 +101,7 @@ class RIRForm(BootstrapMixin, CustomFieldModelForm): ] -class AggregateForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class AggregateForm(TenancyForm, CustomFieldModelForm): rir = DynamicModelChoiceField( queryset=RIR.objects.all(), label='RIR' @@ -129,7 +129,7 @@ class AggregateForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } -class ASNForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class ASNForm(TenancyForm, CustomFieldModelForm): rir = DynamicModelChoiceField( queryset=RIR.objects.all(), label='RIR', @@ -173,7 +173,7 @@ class ASNForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): return instance -class RoleForm(BootstrapMixin, CustomFieldModelForm): +class RoleForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -187,7 +187,7 @@ class RoleForm(BootstrapMixin, CustomFieldModelForm): ] -class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class PrefixForm(TenancyForm, CustomFieldModelForm): vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, @@ -262,7 +262,7 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } -class IPRangeForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class IPRangeForm(TenancyForm, CustomFieldModelForm): vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, @@ -291,7 +291,7 @@ class IPRangeForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } -class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class IPAddressForm(TenancyForm, CustomFieldModelForm): device = DynamicModelChoiceField( queryset=Device.objects.all(), required=False, @@ -499,7 +499,7 @@ class IPAddressForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): return ipaddress -class IPAddressBulkAddForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class IPAddressBulkAddForm(TenancyForm, CustomFieldModelForm): vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, @@ -533,7 +533,7 @@ class IPAddressAssignForm(BootstrapMixin, forms.Form): ) -class FHRPGroupForm(BootstrapMixin, CustomFieldModelForm): +class FHRPGroupForm(CustomFieldModelForm): tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), required=False @@ -613,7 +613,7 @@ class FHRPGroupAssignmentForm(BootstrapMixin, forms.ModelForm): self.fields['group'].widget.add_query_param('related_ip', ipaddress.pk) -class VLANGroupForm(BootstrapMixin, CustomFieldModelForm): +class VLANGroupForm(CustomFieldModelForm): scope_type = ContentTypeChoiceField( queryset=ContentType.objects.filter(model__in=VLANGROUP_SCOPE_TYPES), required=False, @@ -720,7 +720,7 @@ class VLANGroupForm(BootstrapMixin, CustomFieldModelForm): self.instance.scope_id = None -class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class VLANForm(TenancyForm, CustomFieldModelForm): # VLANGroup assignment fields scope_type = forms.ChoiceField( choices=( @@ -801,7 +801,7 @@ class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): } -class ServiceForm(BootstrapMixin, CustomFieldModelForm): +class ServiceForm(CustomFieldModelForm): ports = NumericArrayField( base_field=forms.IntegerField( min_value=SERVICE_PORT_MIN, diff --git a/netbox/tenancy/forms/models.py b/netbox/tenancy/forms/models.py index 0237e4ef8..398a44c9b 100644 --- a/netbox/tenancy/forms/models.py +++ b/netbox/tenancy/forms/models.py @@ -22,7 +22,7 @@ __all__ = ( # Tenants # -class TenantGroupForm(BootstrapMixin, CustomFieldModelForm): +class TenantGroupForm(CustomFieldModelForm): parent = DynamicModelChoiceField( queryset=TenantGroup.objects.all(), required=False @@ -40,7 +40,7 @@ class TenantGroupForm(BootstrapMixin, CustomFieldModelForm): ] -class TenantForm(BootstrapMixin, CustomFieldModelForm): +class TenantForm(CustomFieldModelForm): slug = SlugField() group = DynamicModelChoiceField( queryset=TenantGroup.objects.all(), @@ -66,7 +66,7 @@ class TenantForm(BootstrapMixin, CustomFieldModelForm): # Contacts # -class ContactGroupForm(BootstrapMixin, CustomFieldModelForm): +class ContactGroupForm(CustomFieldModelForm): parent = DynamicModelChoiceField( queryset=ContactGroup.objects.all(), required=False @@ -82,7 +82,7 @@ class ContactGroupForm(BootstrapMixin, CustomFieldModelForm): fields = ('parent', 'name', 'slug', 'description', 'tags') -class ContactRoleForm(BootstrapMixin, CustomFieldModelForm): +class ContactRoleForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -94,7 +94,7 @@ class ContactRoleForm(BootstrapMixin, CustomFieldModelForm): fields = ('name', 'slug', 'description', 'tags') -class ContactForm(BootstrapMixin, CustomFieldModelForm): +class ContactForm(CustomFieldModelForm): group = DynamicModelChoiceField( queryset=ContactGroup.objects.all(), required=False diff --git a/netbox/utilities/forms/forms.py b/netbox/utilities/forms/forms.py index 8bc113218..177c89e52 100644 --- a/netbox/utilities/forms/forms.py +++ b/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. """ diff --git a/netbox/virtualization/forms/models.py b/netbox/virtualization/forms/models.py index 7fa5b0fa6..6fa90ea65 100644 --- a/netbox/virtualization/forms/models.py +++ b/netbox/virtualization/forms/models.py @@ -26,7 +26,7 @@ __all__ = ( ) -class ClusterTypeForm(BootstrapMixin, CustomFieldModelForm): +class ClusterTypeForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -40,7 +40,7 @@ class ClusterTypeForm(BootstrapMixin, CustomFieldModelForm): ) -class ClusterGroupForm(BootstrapMixin, CustomFieldModelForm): +class ClusterGroupForm(CustomFieldModelForm): slug = SlugField() tags = DynamicModelMultipleChoiceField( queryset=Tag.objects.all(), @@ -54,7 +54,7 @@ class ClusterGroupForm(BootstrapMixin, CustomFieldModelForm): ) -class ClusterForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class ClusterForm(TenancyForm, CustomFieldModelForm): type = DynamicModelChoiceField( queryset=ClusterType.objects.all() ) @@ -171,7 +171,7 @@ class ClusterRemoveDevicesForm(ConfirmationForm): ) -class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): +class VirtualMachineForm(TenancyForm, CustomFieldModelForm): cluster_group = DynamicModelChoiceField( queryset=ClusterGroup.objects.all(), required=False, @@ -271,7 +271,7 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldModelForm): self.fields['primary_ip6'].widget.attrs['readonly'] = True -class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm): +class VMInterfaceForm(InterfaceCommonForm, CustomFieldModelForm): parent = DynamicModelChoiceField( queryset=VMInterface.objects.all(), required=False, diff --git a/netbox/wireless/forms/models.py b/netbox/wireless/forms/models.py index f7985a31d..21b76af21 100644 --- a/netbox/wireless/forms/models.py +++ b/netbox/wireless/forms/models.py @@ -14,7 +14,7 @@ __all__ = ( ) -class WirelessLANGroupForm(BootstrapMixin, CustomFieldModelForm): +class WirelessLANGroupForm(CustomFieldModelForm): parent = DynamicModelChoiceField( queryset=WirelessLANGroup.objects.all(), required=False @@ -32,7 +32,7 @@ class WirelessLANGroupForm(BootstrapMixin, CustomFieldModelForm): ] -class WirelessLANForm(BootstrapMixin, CustomFieldModelForm): +class WirelessLANForm(CustomFieldModelForm): group = DynamicModelChoiceField( queryset=WirelessLANGroup.objects.all(), required=False @@ -63,7 +63,7 @@ class WirelessLANForm(BootstrapMixin, CustomFieldModelForm): } -class WirelessLinkForm(BootstrapMixin, CustomFieldModelForm): +class WirelessLinkForm(CustomFieldModelForm): site_a = DynamicModelChoiceField( queryset=Site.objects.all(), required=False,