diff --git a/netbox/circuits/forms.py b/netbox/circuits/forms.py index 02230e7c2..ee4d4f21f 100644 --- a/netbox/circuits/forms.py +++ b/netbox/circuits/forms.py @@ -43,7 +43,7 @@ class ProviderFromCSVForm(forms.ModelForm): fields = ['name', 'slug', 'asn', 'account', 'portal_url'] -class ProviderImportForm(BulkImportForm, BootstrapMixin): +class ProviderImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=ProviderFromCSVForm) @@ -69,7 +69,7 @@ class ProviderFilterForm(BootstrapMixin, CustomFieldFilterForm): # Circuit types # -class CircuitTypeForm(forms.ModelForm, BootstrapMixin): +class CircuitTypeForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -107,7 +107,7 @@ class CircuitFromCSVForm(forms.ModelForm): fields = ['cid', 'provider', 'type', 'tenant', 'install_date', 'commit_rate'] -class CircuitImportForm(BulkImportForm, BootstrapMixin): +class CircuitImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=CircuitFromCSVForm) @@ -139,7 +139,7 @@ class CircuitFilterForm(BootstrapMixin, CustomFieldFilterForm): # Circuit terminations # -class CircuitTerminationForm(forms.ModelForm, BootstrapMixin): +class CircuitTerminationForm(BootstrapMixin, forms.ModelForm): site = forms.ModelChoiceField(queryset=Site.objects.all(), widget=forms.Select(attrs={'filter-for': 'rack'})) rack = forms.ModelChoiceField(queryset=Rack.objects.all(), required=False, label='Rack', widget=APISelect(api_url='/api/dcim/racks/?site_id={{site}}', diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 85dc34883..a4c7d59ac 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -84,7 +84,7 @@ class SiteFromCSVForm(forms.ModelForm): fields = ['name', 'slug', 'tenant', 'facility', 'asn'] -class SiteImportForm(BulkImportForm, BootstrapMixin): +class SiteImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=SiteFromCSVForm) @@ -107,7 +107,7 @@ class SiteFilterForm(BootstrapMixin, CustomFieldFilterForm): # Rack groups # -class RackGroupForm(forms.ModelForm, BootstrapMixin): +class RackGroupForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -115,7 +115,7 @@ class RackGroupForm(forms.ModelForm, BootstrapMixin): fields = ['site', 'name', 'slug'] -class RackGroupFilterForm(forms.Form, BootstrapMixin): +class RackGroupFilterForm(BootstrapMixin, forms.Form): site = FilterChoiceField(queryset=Site.objects.annotate(filter_count=Count('rack_groups')), to_field_name='slug') @@ -123,7 +123,7 @@ class RackGroupFilterForm(forms.Form, BootstrapMixin): # Rack roles # -class RackRoleForm(forms.ModelForm, BootstrapMixin): +class RackRoleForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -209,7 +209,7 @@ class RackFromCSVForm(forms.ModelForm): )) -class RackImportForm(BulkImportForm, BootstrapMixin): +class RackImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=RackFromCSVForm) @@ -243,7 +243,7 @@ class RackFilterForm(BootstrapMixin, CustomFieldFilterForm): # Manufacturers # -class ManufacturerForm(forms.ModelForm, BootstrapMixin): +class ManufacturerForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -283,7 +283,7 @@ class DeviceTypeFilterForm(BootstrapMixin, CustomFieldFilterForm): # Device component templates # -class ConsolePortTemplateForm(forms.ModelForm, BootstrapMixin): +class ConsolePortTemplateForm(BootstrapMixin, forms.ModelForm): name_pattern = ExpandableNameField(label='Name') class Meta: @@ -291,7 +291,7 @@ class ConsolePortTemplateForm(forms.ModelForm, BootstrapMixin): fields = ['name_pattern'] -class ConsoleServerPortTemplateForm(forms.ModelForm, BootstrapMixin): +class ConsoleServerPortTemplateForm(BootstrapMixin, forms.ModelForm): name_pattern = ExpandableNameField(label='Name') class Meta: @@ -299,7 +299,7 @@ class ConsoleServerPortTemplateForm(forms.ModelForm, BootstrapMixin): fields = ['name_pattern'] -class PowerPortTemplateForm(forms.ModelForm, BootstrapMixin): +class PowerPortTemplateForm(BootstrapMixin, forms.ModelForm): name_pattern = ExpandableNameField(label='Name') class Meta: @@ -307,7 +307,7 @@ class PowerPortTemplateForm(forms.ModelForm, BootstrapMixin): fields = ['name_pattern'] -class PowerOutletTemplateForm(forms.ModelForm, BootstrapMixin): +class PowerOutletTemplateForm(BootstrapMixin, forms.ModelForm): name_pattern = ExpandableNameField(label='Name') class Meta: @@ -315,7 +315,7 @@ class PowerOutletTemplateForm(forms.ModelForm, BootstrapMixin): fields = ['name_pattern'] -class InterfaceTemplateForm(forms.ModelForm, BootstrapMixin): +class InterfaceTemplateForm(BootstrapMixin, forms.ModelForm): name_pattern = ExpandableNameField(label='Name') class Meta: @@ -331,7 +331,7 @@ class InterfaceTemplateBulkEditForm(BootstrapMixin, BulkEditForm): nullable_fields = [] -class DeviceBayTemplateForm(forms.ModelForm, BootstrapMixin): +class DeviceBayTemplateForm(BootstrapMixin, forms.ModelForm): name_pattern = ExpandableNameField(label='Name') class Meta: @@ -343,7 +343,7 @@ class DeviceBayTemplateForm(forms.ModelForm, BootstrapMixin): # Device roles # -class DeviceRoleForm(forms.ModelForm, BootstrapMixin): +class DeviceRoleForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -355,7 +355,7 @@ class DeviceRoleForm(forms.ModelForm, BootstrapMixin): # Platforms # -class PlatformForm(forms.ModelForm, BootstrapMixin): +class PlatformForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -572,11 +572,11 @@ class ChildDeviceFromCSVForm(BaseDeviceFromCSVForm): self.add_error('device_bay_name', "Parent device/bay ({} {}) not found".format(parent, device_bay_name)) -class DeviceImportForm(BulkImportForm, BootstrapMixin): +class DeviceImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=DeviceFromCSVForm) -class ChildDeviceImportForm(BulkImportForm, BootstrapMixin): +class ChildDeviceImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=ChildDeviceFromCSVForm) @@ -613,7 +613,7 @@ class DeviceFilterForm(BootstrapMixin, CustomFieldFilterForm): # Bulk device component creation # -class DeviceBulkAddComponentForm(forms.Form, BootstrapMixin): +class DeviceBulkAddComponentForm(BootstrapMixin, forms.Form): pk = forms.ModelMultipleChoiceField(queryset=Device.objects.all(), widget=forms.MultipleHiddenInput) name_pattern = ExpandableNameField(label='Name') @@ -629,7 +629,7 @@ class DeviceBulkAddInterfaceForm(forms.ModelForm, DeviceBulkAddComponentForm): # Console ports # -class ConsolePortForm(forms.ModelForm, BootstrapMixin): +class ConsolePortForm(BootstrapMixin, forms.ModelForm): class Meta: model = ConsolePort @@ -639,7 +639,7 @@ class ConsolePortForm(forms.ModelForm, BootstrapMixin): } -class ConsolePortCreateForm(forms.Form, BootstrapMixin): +class ConsolePortCreateForm(BootstrapMixin, forms.Form): name_pattern = ExpandableNameField(label='Name') @@ -680,7 +680,7 @@ class ConsoleConnectionCSVForm(forms.Form): .format(self.cleaned_data['device'], self.cleaned_data['console_port'])) -class ConsoleConnectionImportForm(BulkImportForm, BootstrapMixin): +class ConsoleConnectionImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=ConsoleConnectionCSVForm) def clean(self): @@ -710,7 +710,7 @@ class ConsoleConnectionImportForm(BulkImportForm, BootstrapMixin): self.cleaned_data['csv'] = connection_list -class ConsolePortConnectionForm(forms.ModelForm, BootstrapMixin): +class ConsolePortConnectionForm(BootstrapMixin, forms.ModelForm): rack = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False, widget=forms.Select(attrs={'filter-for': 'console_server'})) console_server = forms.ModelChoiceField(queryset=Device.objects.all(), label='Console Server', required=False, @@ -764,7 +764,7 @@ class ConsolePortConnectionForm(forms.ModelForm, BootstrapMixin): # Console server ports # -class ConsoleServerPortForm(forms.ModelForm, BootstrapMixin): +class ConsoleServerPortForm(BootstrapMixin, forms.ModelForm): class Meta: model = ConsoleServerPort @@ -774,11 +774,11 @@ class ConsoleServerPortForm(forms.ModelForm, BootstrapMixin): } -class ConsoleServerPortCreateForm(forms.Form, BootstrapMixin): +class ConsoleServerPortCreateForm(BootstrapMixin, forms.Form): name_pattern = ExpandableNameField(label='Name') -class ConsoleServerPortConnectionForm(forms.Form, BootstrapMixin): +class ConsoleServerPortConnectionForm(BootstrapMixin, forms.Form): rack = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False, widget=forms.Select(attrs={'filter-for': 'device'})) device = forms.ModelChoiceField(queryset=Device.objects.all(), label='Device', required=False, @@ -826,7 +826,7 @@ class ConsoleServerPortConnectionForm(forms.Form, BootstrapMixin): # Power ports # -class PowerPortForm(forms.ModelForm, BootstrapMixin): +class PowerPortForm(BootstrapMixin, forms.ModelForm): class Meta: model = PowerPort @@ -836,7 +836,7 @@ class PowerPortForm(forms.ModelForm, BootstrapMixin): } -class PowerPortCreateForm(forms.Form, BootstrapMixin): +class PowerPortCreateForm(BootstrapMixin, forms.Form): name_pattern = ExpandableNameField(label='Name') @@ -877,7 +877,7 @@ class PowerConnectionCSVForm(forms.Form): .format(self.cleaned_data['device'], self.cleaned_data['power_port'])) -class PowerConnectionImportForm(BulkImportForm, BootstrapMixin): +class PowerConnectionImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=PowerConnectionCSVForm) def clean(self): @@ -907,7 +907,7 @@ class PowerConnectionImportForm(BulkImportForm, BootstrapMixin): self.cleaned_data['csv'] = connection_list -class PowerPortConnectionForm(forms.ModelForm, BootstrapMixin): +class PowerPortConnectionForm(BootstrapMixin, forms.ModelForm): rack = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False, widget=forms.Select(attrs={'filter-for': 'pdu'})) pdu = forms.ModelChoiceField(queryset=Device.objects.all(), label='PDU', required=False, @@ -960,7 +960,7 @@ class PowerPortConnectionForm(forms.ModelForm, BootstrapMixin): # Power outlets # -class PowerOutletForm(forms.ModelForm, BootstrapMixin): +class PowerOutletForm(BootstrapMixin, forms.ModelForm): class Meta: model = PowerOutlet @@ -970,11 +970,11 @@ class PowerOutletForm(forms.ModelForm, BootstrapMixin): } -class PowerOutletCreateForm(forms.Form, BootstrapMixin): +class PowerOutletCreateForm(BootstrapMixin, forms.Form): name_pattern = ExpandableNameField(label='Name') -class PowerOutletConnectionForm(forms.Form, BootstrapMixin): +class PowerOutletConnectionForm(BootstrapMixin, forms.Form): rack = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False, widget=forms.Select(attrs={'filter-for': 'device'})) device = forms.ModelChoiceField(queryset=Device.objects.all(), label='Device', required=False, @@ -1022,7 +1022,7 @@ class PowerOutletConnectionForm(forms.Form, BootstrapMixin): # Interfaces # -class InterfaceForm(forms.ModelForm, BootstrapMixin): +class InterfaceForm(BootstrapMixin, forms.ModelForm): class Meta: model = Interface @@ -1032,7 +1032,7 @@ class InterfaceForm(forms.ModelForm, BootstrapMixin): } -class InterfaceCreateForm(forms.ModelForm, BootstrapMixin): +class InterfaceCreateForm(BootstrapMixin, forms.ModelForm): name_pattern = ExpandableNameField(label='Name') class Meta: @@ -1053,7 +1053,7 @@ class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm): # Interface connections # -class InterfaceConnectionForm(forms.ModelForm, BootstrapMixin): +class InterfaceConnectionForm(BootstrapMixin, forms.ModelForm): interface_a = forms.ChoiceField(choices=[], widget=SelectWithDisabled, label='Interface') site_b = forms.ModelChoiceField(queryset=Site.objects.all(), label='Site', required=False, widget=forms.Select(attrs={'filter-for': 'rack_b'})) @@ -1158,7 +1158,7 @@ class InterfaceConnectionCSVForm(forms.Form): pass -class InterfaceConnectionImportForm(BulkImportForm, BootstrapMixin): +class InterfaceConnectionImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=InterfaceConnectionCSVForm) def clean(self): @@ -1198,7 +1198,7 @@ class InterfaceConnectionImportForm(BulkImportForm, BootstrapMixin): self.cleaned_data['csv'] = connection_list -class InterfaceConnectionDeletionForm(forms.Form, BootstrapMixin): +class InterfaceConnectionDeletionForm(BootstrapMixin, forms.Form): confirm = forms.BooleanField(required=True) # Used for HTTP redirect upon successful deletion device = forms.ModelChoiceField(queryset=Device.objects.all(), widget=forms.HiddenInput(), required=False) @@ -1208,7 +1208,7 @@ class InterfaceConnectionDeletionForm(forms.Form, BootstrapMixin): # Device bays # -class DeviceBayForm(forms.ModelForm, BootstrapMixin): +class DeviceBayForm(BootstrapMixin, forms.ModelForm): class Meta: model = DeviceBay @@ -1218,11 +1218,11 @@ class DeviceBayForm(forms.ModelForm, BootstrapMixin): } -class DeviceBayCreateForm(forms.Form, BootstrapMixin): +class DeviceBayCreateForm(BootstrapMixin, forms.Form): name_pattern = ExpandableNameField(label='Name') -class PopulateDeviceBayForm(forms.Form, BootstrapMixin): +class PopulateDeviceBayForm(BootstrapMixin, forms.Form): installed_device = forms.ModelChoiceField(queryset=Device.objects.all(), label='Child Device', help_text="Child devices must first be created within the rack occupied " "by the parent device. Then they can be assigned to a bay.") @@ -1243,15 +1243,15 @@ class PopulateDeviceBayForm(forms.Form, BootstrapMixin): # Connections # -class ConsoleConnectionFilterForm(forms.Form, BootstrapMixin): +class ConsoleConnectionFilterForm(BootstrapMixin, forms.Form): site = forms.ModelChoiceField(required=False, queryset=Site.objects.all(), to_field_name='slug') -class PowerConnectionFilterForm(forms.Form, BootstrapMixin): +class PowerConnectionFilterForm(BootstrapMixin, forms.Form): site = forms.ModelChoiceField(required=False, queryset=Site.objects.all(), to_field_name='slug') -class InterfaceConnectionFilterForm(forms.Form, BootstrapMixin): +class InterfaceConnectionFilterForm(BootstrapMixin, forms.Form): site = forms.ModelChoiceField(required=False, queryset=Site.objects.all(), to_field_name='slug') @@ -1289,7 +1289,7 @@ class IPAddressForm(BootstrapMixin, CustomFieldForm): # Modules # -class ModuleForm(forms.ModelForm, BootstrapMixin): +class ModuleForm(BootstrapMixin, forms.ModelForm): class Meta: model = Module diff --git a/netbox/ipam/forms.py b/netbox/ipam/forms.py index d31488f46..d74695c76 100644 --- a/netbox/ipam/forms.py +++ b/netbox/ipam/forms.py @@ -48,7 +48,7 @@ class VRFFromCSVForm(forms.ModelForm): fields = ['name', 'rd', 'tenant', 'enforce_unique', 'description'] -class VRFImportForm(BulkImportForm, BootstrapMixin): +class VRFImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=VRFFromCSVForm) @@ -71,7 +71,7 @@ class VRFFilterForm(BootstrapMixin, CustomFieldFilterForm): # RIRs # -class RIRForm(forms.ModelForm, BootstrapMixin): +class RIRForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -79,7 +79,7 @@ class RIRForm(forms.ModelForm, BootstrapMixin): fields = ['name', 'slug', 'is_private'] -class RIRFilterForm(forms.Form, BootstrapMixin): +class RIRFilterForm(BootstrapMixin, forms.Form): is_private = forms.NullBooleanField(required=False, label='Private', widget=forms.Select(choices=[ ('', '---------'), ('True', 'Yes'), @@ -112,7 +112,7 @@ class AggregateFromCSVForm(forms.ModelForm): fields = ['prefix', 'rir', 'date_added', 'description'] -class AggregateImportForm(BulkImportForm, BootstrapMixin): +class AggregateImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=AggregateFromCSVForm) @@ -137,7 +137,7 @@ class AggregateFilterForm(BootstrapMixin, CustomFieldFilterForm): # Roles # -class RoleForm(forms.ModelForm, BootstrapMixin): +class RoleForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -236,7 +236,7 @@ class PrefixFromCSVForm(forms.ModelForm): return super(PrefixFromCSVForm, self).save(*args, **kwargs) -class PrefixImportForm(BulkImportForm, BootstrapMixin): +class PrefixImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=PrefixFromCSVForm) @@ -340,7 +340,7 @@ class IPAddressForm(BootstrapMixin, CustomFieldForm): self.fields['nat_inside'].choices = [] -class IPAddressBulkAddForm(forms.Form, BootstrapMixin): +class IPAddressBulkAddForm(BootstrapMixin, forms.Form): address = ExpandableIPAddressField() vrf = forms.ModelChoiceField(queryset=VRF.objects.all(), required=False, label='VRF') tenant = forms.ModelChoiceField(queryset=Tenant.objects.all(), required=False) @@ -426,7 +426,7 @@ class IPAddressFromCSVForm(forms.ModelForm): return super(IPAddressFromCSVForm, self).save(*args, **kwargs) -class IPAddressImportForm(BulkImportForm, BootstrapMixin): +class IPAddressImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=IPAddressFromCSVForm) @@ -465,7 +465,7 @@ class IPAddressFilterForm(BootstrapMixin, CustomFieldFilterForm): # VLAN groups # -class VLANGroupForm(forms.ModelForm, BootstrapMixin): +class VLANGroupForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -473,7 +473,7 @@ class VLANGroupForm(forms.ModelForm, BootstrapMixin): fields = ['site', 'name', 'slug'] -class VLANGroupFilterForm(forms.Form, BootstrapMixin): +class VLANGroupFilterForm(BootstrapMixin, forms.Form): site = FilterChoiceField(queryset=Site.objects.annotate(filter_count=Count('vlan_groups')), to_field_name='slug') @@ -538,7 +538,7 @@ class VLANFromCSVForm(forms.ModelForm): return m -class VLANImportForm(BulkImportForm, BootstrapMixin): +class VLANImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=VLANFromCSVForm) @@ -578,7 +578,7 @@ class VLANFilterForm(BootstrapMixin, CustomFieldFilterForm): # Services # -class ServiceForm(forms.ModelForm, BootstrapMixin): +class ServiceForm(BootstrapMixin, forms.ModelForm): class Meta: model = Service diff --git a/netbox/secrets/forms.py b/netbox/secrets/forms.py index 3f3d397a3..8012e2c55 100644 --- a/netbox/secrets/forms.py +++ b/netbox/secrets/forms.py @@ -34,7 +34,7 @@ def validate_rsa_key(key, is_secret=True): # Secret roles # -class SecretRoleForm(forms.ModelForm, BootstrapMixin): +class SecretRoleForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -46,7 +46,7 @@ class SecretRoleForm(forms.ModelForm, BootstrapMixin): # Secrets # -class SecretForm(forms.ModelForm, BootstrapMixin): +class SecretForm(BootstrapMixin, forms.ModelForm): private_key = forms.CharField(required=False, widget=forms.HiddenInput()) plaintext = forms.CharField(max_length=65535, required=False, label='Plaintext', widget=forms.PasswordInput(attrs={'class': 'requires-private-key'})) @@ -85,12 +85,12 @@ class SecretFromCSVForm(forms.ModelForm): return s -class SecretImportForm(BulkImportForm, BootstrapMixin): +class SecretImportForm(BootstrapMixin, BulkImportForm): private_key = forms.CharField(widget=forms.HiddenInput()) csv = CSVDataField(csv_form=SecretFromCSVForm, widget=forms.Textarea(attrs={'class': 'requires-private-key'})) -class SecretBulkEditForm(BulkEditForm, BootstrapMixin): +class SecretBulkEditForm(BootstrapMixin, BulkEditForm): pk = forms.ModelMultipleChoiceField(queryset=Secret.objects.all(), widget=forms.MultipleHiddenInput) role = forms.ModelChoiceField(queryset=SecretRole.objects.all(), required=False) name = forms.CharField(max_length=100, required=False) @@ -99,7 +99,7 @@ class SecretBulkEditForm(BulkEditForm, BootstrapMixin): nullable_fields = ['name'] -class SecretFilterForm(forms.Form, BootstrapMixin): +class SecretFilterForm(BootstrapMixin, forms.Form): role = FilterChoiceField(queryset=SecretRole.objects.annotate(filter_count=Count('secrets')), to_field_name='slug') @@ -107,7 +107,7 @@ class SecretFilterForm(forms.Form, BootstrapMixin): # UserKeys # -class UserKeyForm(forms.ModelForm, BootstrapMixin): +class UserKeyForm(BootstrapMixin, forms.ModelForm): class Meta: model = UserKey diff --git a/netbox/tenancy/forms.py b/netbox/tenancy/forms.py index 0fe6d933f..bd98f2031 100644 --- a/netbox/tenancy/forms.py +++ b/netbox/tenancy/forms.py @@ -11,7 +11,7 @@ from .models import Tenant, TenantGroup # Tenant groups # -class TenantGroupForm(forms.ModelForm, BootstrapMixin): +class TenantGroupForm(BootstrapMixin, forms.ModelForm): slug = SlugField() class Meta: @@ -41,7 +41,7 @@ class TenantFromCSVForm(forms.ModelForm): fields = ['name', 'slug', 'group', 'description'] -class TenantImportForm(BulkImportForm, BootstrapMixin): +class TenantImportForm(BootstrapMixin, BulkImportForm): csv = CSVDataField(csv_form=TenantFromCSVForm) diff --git a/netbox/users/forms.py b/netbox/users/forms.py index c07175347..b3330ddbf 100644 --- a/netbox/users/forms.py +++ b/netbox/users/forms.py @@ -3,7 +3,7 @@ from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as from utilities.forms import BootstrapMixin -class LoginForm(AuthenticationForm, BootstrapMixin): +class LoginForm(BootstrapMixin, AuthenticationForm): def __init__(self, *args, **kwargs): super(LoginForm, self).__init__(*args, **kwargs) @@ -12,5 +12,5 @@ class LoginForm(AuthenticationForm, BootstrapMixin): self.fields['password'].widget.attrs['placeholder'] = '' -class PasswordChangeForm(DjangoPasswordChangeForm, BootstrapMixin): +class PasswordChangeForm(BootstrapMixin, DjangoPasswordChangeForm): pass diff --git a/netbox/utilities/forms.py b/netbox/utilities/forms.py index 979706ace..9351c6044 100644 --- a/netbox/utilities/forms.py +++ b/netbox/utilities/forms.py @@ -385,7 +385,7 @@ class BootstrapMixin(forms.BaseForm): field.widget.attrs['placeholder'] = field.label -class ConfirmationForm(forms.Form, BootstrapMixin): +class ConfirmationForm(BootstrapMixin, forms.Form): confirm = forms.BooleanField(required=True)