Browse Source

Standardized inheritance order of BootstrapMixin

Jeremy Stretch 8 years ago
parent
commit
37b2ff02e7

+ 4 - 4
netbox/circuits/forms.py

@@ -43,7 +43,7 @@ class ProviderFromCSVForm(forms.ModelForm):
         fields = ['name', 'slug', 'asn', 'account', 'portal_url']
         fields = ['name', 'slug', 'asn', 'account', 'portal_url']
 
 
 
 
-class ProviderImportForm(BulkImportForm, BootstrapMixin):
+class ProviderImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=ProviderFromCSVForm)
     csv = CSVDataField(csv_form=ProviderFromCSVForm)
 
 
 
 
@@ -69,7 +69,7 @@ class ProviderFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # Circuit types
 # Circuit types
 #
 #
 
 
-class CircuitTypeForm(forms.ModelForm, BootstrapMixin):
+class CircuitTypeForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -107,7 +107,7 @@ class CircuitFromCSVForm(forms.ModelForm):
         fields = ['cid', 'provider', 'type', 'tenant', 'install_date', 'commit_rate']
         fields = ['cid', 'provider', 'type', 'tenant', 'install_date', 'commit_rate']
 
 
 
 
-class CircuitImportForm(BulkImportForm, BootstrapMixin):
+class CircuitImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=CircuitFromCSVForm)
     csv = CSVDataField(csv_form=CircuitFromCSVForm)
 
 
 
 
@@ -139,7 +139,7 @@ class CircuitFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # Circuit terminations
 # 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'}))
     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',
     rack = forms.ModelChoiceField(queryset=Rack.objects.all(), required=False, label='Rack',
                                   widget=APISelect(api_url='/api/dcim/racks/?site_id={{site}}',
                                   widget=APISelect(api_url='/api/dcim/racks/?site_id={{site}}',

+ 43 - 43
netbox/dcim/forms.py

@@ -84,7 +84,7 @@ class SiteFromCSVForm(forms.ModelForm):
         fields = ['name', 'slug', 'tenant', 'facility', 'asn']
         fields = ['name', 'slug', 'tenant', 'facility', 'asn']
 
 
 
 
-class SiteImportForm(BulkImportForm, BootstrapMixin):
+class SiteImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=SiteFromCSVForm)
     csv = CSVDataField(csv_form=SiteFromCSVForm)
 
 
 
 
@@ -107,7 +107,7 @@ class SiteFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # Rack groups
 # Rack groups
 #
 #
 
 
-class RackGroupForm(forms.ModelForm, BootstrapMixin):
+class RackGroupForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -115,7 +115,7 @@ class RackGroupForm(forms.ModelForm, BootstrapMixin):
         fields = ['site', 'name', 'slug']
         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')
     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
 # Rack roles
 #
 #
 
 
-class RackRoleForm(forms.ModelForm, BootstrapMixin):
+class RackRoleForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -209,7 +209,7 @@ class RackFromCSVForm(forms.ModelForm):
             ))
             ))
 
 
 
 
-class RackImportForm(BulkImportForm, BootstrapMixin):
+class RackImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=RackFromCSVForm)
     csv = CSVDataField(csv_form=RackFromCSVForm)
 
 
 
 
@@ -243,7 +243,7 @@ class RackFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # Manufacturers
 # Manufacturers
 #
 #
 
 
-class ManufacturerForm(forms.ModelForm, BootstrapMixin):
+class ManufacturerForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -283,7 +283,7 @@ class DeviceTypeFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # Device component templates
 # Device component templates
 #
 #
 
 
-class ConsolePortTemplateForm(forms.ModelForm, BootstrapMixin):
+class ConsolePortTemplateForm(BootstrapMixin, forms.ModelForm):
     name_pattern = ExpandableNameField(label='Name')
     name_pattern = ExpandableNameField(label='Name')
 
 
     class Meta:
     class Meta:
@@ -291,7 +291,7 @@ class ConsolePortTemplateForm(forms.ModelForm, BootstrapMixin):
         fields = ['name_pattern']
         fields = ['name_pattern']
 
 
 
 
-class ConsoleServerPortTemplateForm(forms.ModelForm, BootstrapMixin):
+class ConsoleServerPortTemplateForm(BootstrapMixin, forms.ModelForm):
     name_pattern = ExpandableNameField(label='Name')
     name_pattern = ExpandableNameField(label='Name')
 
 
     class Meta:
     class Meta:
@@ -299,7 +299,7 @@ class ConsoleServerPortTemplateForm(forms.ModelForm, BootstrapMixin):
         fields = ['name_pattern']
         fields = ['name_pattern']
 
 
 
 
-class PowerPortTemplateForm(forms.ModelForm, BootstrapMixin):
+class PowerPortTemplateForm(BootstrapMixin, forms.ModelForm):
     name_pattern = ExpandableNameField(label='Name')
     name_pattern = ExpandableNameField(label='Name')
 
 
     class Meta:
     class Meta:
@@ -307,7 +307,7 @@ class PowerPortTemplateForm(forms.ModelForm, BootstrapMixin):
         fields = ['name_pattern']
         fields = ['name_pattern']
 
 
 
 
-class PowerOutletTemplateForm(forms.ModelForm, BootstrapMixin):
+class PowerOutletTemplateForm(BootstrapMixin, forms.ModelForm):
     name_pattern = ExpandableNameField(label='Name')
     name_pattern = ExpandableNameField(label='Name')
 
 
     class Meta:
     class Meta:
@@ -315,7 +315,7 @@ class PowerOutletTemplateForm(forms.ModelForm, BootstrapMixin):
         fields = ['name_pattern']
         fields = ['name_pattern']
 
 
 
 
-class InterfaceTemplateForm(forms.ModelForm, BootstrapMixin):
+class InterfaceTemplateForm(BootstrapMixin, forms.ModelForm):
     name_pattern = ExpandableNameField(label='Name')
     name_pattern = ExpandableNameField(label='Name')
 
 
     class Meta:
     class Meta:
@@ -331,7 +331,7 @@ class InterfaceTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
         nullable_fields = []
         nullable_fields = []
 
 
 
 
-class DeviceBayTemplateForm(forms.ModelForm, BootstrapMixin):
+class DeviceBayTemplateForm(BootstrapMixin, forms.ModelForm):
     name_pattern = ExpandableNameField(label='Name')
     name_pattern = ExpandableNameField(label='Name')
 
 
     class Meta:
     class Meta:
@@ -343,7 +343,7 @@ class DeviceBayTemplateForm(forms.ModelForm, BootstrapMixin):
 # Device roles
 # Device roles
 #
 #
 
 
-class DeviceRoleForm(forms.ModelForm, BootstrapMixin):
+class DeviceRoleForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -355,7 +355,7 @@ class DeviceRoleForm(forms.ModelForm, BootstrapMixin):
 # Platforms
 # Platforms
 #
 #
 
 
-class PlatformForm(forms.ModelForm, BootstrapMixin):
+class PlatformForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     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))
                 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)
     csv = CSVDataField(csv_form=DeviceFromCSVForm)
 
 
 
 
-class ChildDeviceImportForm(BulkImportForm, BootstrapMixin):
+class ChildDeviceImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=ChildDeviceFromCSVForm)
     csv = CSVDataField(csv_form=ChildDeviceFromCSVForm)
 
 
 
 
@@ -613,7 +613,7 @@ class DeviceFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # Bulk device component creation
 # Bulk device component creation
 #
 #
 
 
-class DeviceBulkAddComponentForm(forms.Form, BootstrapMixin):
+class DeviceBulkAddComponentForm(BootstrapMixin, forms.Form):
     pk = forms.ModelMultipleChoiceField(queryset=Device.objects.all(), widget=forms.MultipleHiddenInput)
     pk = forms.ModelMultipleChoiceField(queryset=Device.objects.all(), widget=forms.MultipleHiddenInput)
     name_pattern = ExpandableNameField(label='Name')
     name_pattern = ExpandableNameField(label='Name')
 
 
@@ -629,7 +629,7 @@ class DeviceBulkAddInterfaceForm(forms.ModelForm, DeviceBulkAddComponentForm):
 # Console ports
 # Console ports
 #
 #
 
 
-class ConsolePortForm(forms.ModelForm, BootstrapMixin):
+class ConsolePortForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = ConsolePort
         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')
     name_pattern = ExpandableNameField(label='Name')
 
 
 
 
@@ -680,7 +680,7 @@ class ConsoleConnectionCSVForm(forms.Form):
                                             .format(self.cleaned_data['device'], self.cleaned_data['console_port']))
                                             .format(self.cleaned_data['device'], self.cleaned_data['console_port']))
 
 
 
 
-class ConsoleConnectionImportForm(BulkImportForm, BootstrapMixin):
+class ConsoleConnectionImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=ConsoleConnectionCSVForm)
     csv = CSVDataField(csv_form=ConsoleConnectionCSVForm)
 
 
     def clean(self):
     def clean(self):
@@ -710,7 +710,7 @@ class ConsoleConnectionImportForm(BulkImportForm, BootstrapMixin):
         self.cleaned_data['csv'] = connection_list
         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,
     rack = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False,
                                   widget=forms.Select(attrs={'filter-for': 'console_server'}))
                                   widget=forms.Select(attrs={'filter-for': 'console_server'}))
     console_server = forms.ModelChoiceField(queryset=Device.objects.all(), label='Console Server', required=False,
     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
 # Console server ports
 #
 #
 
 
-class ConsoleServerPortForm(forms.ModelForm, BootstrapMixin):
+class ConsoleServerPortForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = ConsoleServerPort
         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')
     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,
     rack = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False,
                                   widget=forms.Select(attrs={'filter-for': 'device'}))
                                   widget=forms.Select(attrs={'filter-for': 'device'}))
     device = forms.ModelChoiceField(queryset=Device.objects.all(), label='Device', required=False,
     device = forms.ModelChoiceField(queryset=Device.objects.all(), label='Device', required=False,
@@ -826,7 +826,7 @@ class ConsoleServerPortConnectionForm(forms.Form, BootstrapMixin):
 # Power ports
 # Power ports
 #
 #
 
 
-class PowerPortForm(forms.ModelForm, BootstrapMixin):
+class PowerPortForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = PowerPort
         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')
     name_pattern = ExpandableNameField(label='Name')
 
 
 
 
@@ -877,7 +877,7 @@ class PowerConnectionCSVForm(forms.Form):
                                             .format(self.cleaned_data['device'], self.cleaned_data['power_port']))
                                             .format(self.cleaned_data['device'], self.cleaned_data['power_port']))
 
 
 
 
-class PowerConnectionImportForm(BulkImportForm, BootstrapMixin):
+class PowerConnectionImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=PowerConnectionCSVForm)
     csv = CSVDataField(csv_form=PowerConnectionCSVForm)
 
 
     def clean(self):
     def clean(self):
@@ -907,7 +907,7 @@ class PowerConnectionImportForm(BulkImportForm, BootstrapMixin):
         self.cleaned_data['csv'] = connection_list
         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,
     rack = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False,
                                   widget=forms.Select(attrs={'filter-for': 'pdu'}))
                                   widget=forms.Select(attrs={'filter-for': 'pdu'}))
     pdu = forms.ModelChoiceField(queryset=Device.objects.all(), label='PDU', required=False,
     pdu = forms.ModelChoiceField(queryset=Device.objects.all(), label='PDU', required=False,
@@ -960,7 +960,7 @@ class PowerPortConnectionForm(forms.ModelForm, BootstrapMixin):
 # Power outlets
 # Power outlets
 #
 #
 
 
-class PowerOutletForm(forms.ModelForm, BootstrapMixin):
+class PowerOutletForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = PowerOutlet
         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')
     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,
     rack = forms.ModelChoiceField(queryset=Rack.objects.all(), label='Rack', required=False,
                                   widget=forms.Select(attrs={'filter-for': 'device'}))
                                   widget=forms.Select(attrs={'filter-for': 'device'}))
     device = forms.ModelChoiceField(queryset=Device.objects.all(), label='Device', required=False,
     device = forms.ModelChoiceField(queryset=Device.objects.all(), label='Device', required=False,
@@ -1022,7 +1022,7 @@ class PowerOutletConnectionForm(forms.Form, BootstrapMixin):
 # Interfaces
 # Interfaces
 #
 #
 
 
-class InterfaceForm(forms.ModelForm, BootstrapMixin):
+class InterfaceForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = Interface
         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')
     name_pattern = ExpandableNameField(label='Name')
 
 
     class Meta:
     class Meta:
@@ -1053,7 +1053,7 @@ class InterfaceBulkEditForm(BootstrapMixin, BulkEditForm):
 # Interface connections
 # Interface connections
 #
 #
 
 
-class InterfaceConnectionForm(forms.ModelForm, BootstrapMixin):
+class InterfaceConnectionForm(BootstrapMixin, forms.ModelForm):
     interface_a = forms.ChoiceField(choices=[], widget=SelectWithDisabled, label='Interface')
     interface_a = forms.ChoiceField(choices=[], widget=SelectWithDisabled, label='Interface')
     site_b = forms.ModelChoiceField(queryset=Site.objects.all(), label='Site', required=False,
     site_b = forms.ModelChoiceField(queryset=Site.objects.all(), label='Site', required=False,
                                     widget=forms.Select(attrs={'filter-for': 'rack_b'}))
                                     widget=forms.Select(attrs={'filter-for': 'rack_b'}))
@@ -1158,7 +1158,7 @@ class InterfaceConnectionCSVForm(forms.Form):
                 pass
                 pass
 
 
 
 
-class InterfaceConnectionImportForm(BulkImportForm, BootstrapMixin):
+class InterfaceConnectionImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=InterfaceConnectionCSVForm)
     csv = CSVDataField(csv_form=InterfaceConnectionCSVForm)
 
 
     def clean(self):
     def clean(self):
@@ -1198,7 +1198,7 @@ class InterfaceConnectionImportForm(BulkImportForm, BootstrapMixin):
         self.cleaned_data['csv'] = connection_list
         self.cleaned_data['csv'] = connection_list
 
 
 
 
-class InterfaceConnectionDeletionForm(forms.Form, BootstrapMixin):
+class InterfaceConnectionDeletionForm(BootstrapMixin, forms.Form):
     confirm = forms.BooleanField(required=True)
     confirm = forms.BooleanField(required=True)
     # Used for HTTP redirect upon successful deletion
     # Used for HTTP redirect upon successful deletion
     device = forms.ModelChoiceField(queryset=Device.objects.all(), widget=forms.HiddenInput(), required=False)
     device = forms.ModelChoiceField(queryset=Device.objects.all(), widget=forms.HiddenInput(), required=False)
@@ -1208,7 +1208,7 @@ class InterfaceConnectionDeletionForm(forms.Form, BootstrapMixin):
 # Device bays
 # Device bays
 #
 #
 
 
-class DeviceBayForm(forms.ModelForm, BootstrapMixin):
+class DeviceBayForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = DeviceBay
         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')
     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',
     installed_device = forms.ModelChoiceField(queryset=Device.objects.all(), label='Child Device',
                                               help_text="Child devices must first be created within the rack occupied "
                                               help_text="Child devices must first be created within the rack occupied "
                                                         "by the parent device. Then they can be assigned to a bay.")
                                                         "by the parent device. Then they can be assigned to a bay.")
@@ -1243,15 +1243,15 @@ class PopulateDeviceBayForm(forms.Form, BootstrapMixin):
 # Connections
 # Connections
 #
 #
 
 
-class ConsoleConnectionFilterForm(forms.Form, BootstrapMixin):
+class ConsoleConnectionFilterForm(BootstrapMixin, forms.Form):
     site = forms.ModelChoiceField(required=False, queryset=Site.objects.all(), to_field_name='slug')
     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')
     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')
     site = forms.ModelChoiceField(required=False, queryset=Site.objects.all(), to_field_name='slug')
 
 
 
 
@@ -1289,7 +1289,7 @@ class IPAddressForm(BootstrapMixin, CustomFieldForm):
 # Modules
 # Modules
 #
 #
 
 
-class ModuleForm(forms.ModelForm, BootstrapMixin):
+class ModuleForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = Module
         model = Module

+ 12 - 12
netbox/ipam/forms.py

@@ -48,7 +48,7 @@ class VRFFromCSVForm(forms.ModelForm):
         fields = ['name', 'rd', 'tenant', 'enforce_unique', 'description']
         fields = ['name', 'rd', 'tenant', 'enforce_unique', 'description']
 
 
 
 
-class VRFImportForm(BulkImportForm, BootstrapMixin):
+class VRFImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=VRFFromCSVForm)
     csv = CSVDataField(csv_form=VRFFromCSVForm)
 
 
 
 
@@ -71,7 +71,7 @@ class VRFFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # RIRs
 # RIRs
 #
 #
 
 
-class RIRForm(forms.ModelForm, BootstrapMixin):
+class RIRForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -79,7 +79,7 @@ class RIRForm(forms.ModelForm, BootstrapMixin):
         fields = ['name', 'slug', 'is_private']
         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=[
     is_private = forms.NullBooleanField(required=False, label='Private', widget=forms.Select(choices=[
         ('', '---------'),
         ('', '---------'),
         ('True', 'Yes'),
         ('True', 'Yes'),
@@ -112,7 +112,7 @@ class AggregateFromCSVForm(forms.ModelForm):
         fields = ['prefix', 'rir', 'date_added', 'description']
         fields = ['prefix', 'rir', 'date_added', 'description']
 
 
 
 
-class AggregateImportForm(BulkImportForm, BootstrapMixin):
+class AggregateImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=AggregateFromCSVForm)
     csv = CSVDataField(csv_form=AggregateFromCSVForm)
 
 
 
 
@@ -137,7 +137,7 @@ class AggregateFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # Roles
 # Roles
 #
 #
 
 
-class RoleForm(forms.ModelForm, BootstrapMixin):
+class RoleForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -236,7 +236,7 @@ class PrefixFromCSVForm(forms.ModelForm):
         return super(PrefixFromCSVForm, self).save(*args, **kwargs)
         return super(PrefixFromCSVForm, self).save(*args, **kwargs)
 
 
 
 
-class PrefixImportForm(BulkImportForm, BootstrapMixin):
+class PrefixImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=PrefixFromCSVForm)
     csv = CSVDataField(csv_form=PrefixFromCSVForm)
 
 
 
 
@@ -340,7 +340,7 @@ class IPAddressForm(BootstrapMixin, CustomFieldForm):
                 self.fields['nat_inside'].choices = []
                 self.fields['nat_inside'].choices = []
 
 
 
 
-class IPAddressBulkAddForm(forms.Form, BootstrapMixin):
+class IPAddressBulkAddForm(BootstrapMixin, forms.Form):
     address = ExpandableIPAddressField()
     address = ExpandableIPAddressField()
     vrf = forms.ModelChoiceField(queryset=VRF.objects.all(), required=False, label='VRF')
     vrf = forms.ModelChoiceField(queryset=VRF.objects.all(), required=False, label='VRF')
     tenant = forms.ModelChoiceField(queryset=Tenant.objects.all(), required=False)
     tenant = forms.ModelChoiceField(queryset=Tenant.objects.all(), required=False)
@@ -426,7 +426,7 @@ class IPAddressFromCSVForm(forms.ModelForm):
         return super(IPAddressFromCSVForm, self).save(*args, **kwargs)
         return super(IPAddressFromCSVForm, self).save(*args, **kwargs)
 
 
 
 
-class IPAddressImportForm(BulkImportForm, BootstrapMixin):
+class IPAddressImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=IPAddressFromCSVForm)
     csv = CSVDataField(csv_form=IPAddressFromCSVForm)
 
 
 
 
@@ -465,7 +465,7 @@ class IPAddressFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # VLAN groups
 # VLAN groups
 #
 #
 
 
-class VLANGroupForm(forms.ModelForm, BootstrapMixin):
+class VLANGroupForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -473,7 +473,7 @@ class VLANGroupForm(forms.ModelForm, BootstrapMixin):
         fields = ['site', 'name', 'slug']
         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')
     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
         return m
 
 
 
 
-class VLANImportForm(BulkImportForm, BootstrapMixin):
+class VLANImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=VLANFromCSVForm)
     csv = CSVDataField(csv_form=VLANFromCSVForm)
 
 
 
 
@@ -578,7 +578,7 @@ class VLANFilterForm(BootstrapMixin, CustomFieldFilterForm):
 # Services
 # Services
 #
 #
 
 
-class ServiceForm(forms.ModelForm, BootstrapMixin):
+class ServiceForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = Service
         model = Service

+ 6 - 6
netbox/secrets/forms.py

@@ -34,7 +34,7 @@ def validate_rsa_key(key, is_secret=True):
 # Secret roles
 # Secret roles
 #
 #
 
 
-class SecretRoleForm(forms.ModelForm, BootstrapMixin):
+class SecretRoleForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -46,7 +46,7 @@ class SecretRoleForm(forms.ModelForm, BootstrapMixin):
 # Secrets
 # Secrets
 #
 #
 
 
-class SecretForm(forms.ModelForm, BootstrapMixin):
+class SecretForm(BootstrapMixin, forms.ModelForm):
     private_key = forms.CharField(required=False, widget=forms.HiddenInput())
     private_key = forms.CharField(required=False, widget=forms.HiddenInput())
     plaintext = forms.CharField(max_length=65535, required=False, label='Plaintext',
     plaintext = forms.CharField(max_length=65535, required=False, label='Plaintext',
                                 widget=forms.PasswordInput(attrs={'class': 'requires-private-key'}))
                                 widget=forms.PasswordInput(attrs={'class': 'requires-private-key'}))
@@ -85,12 +85,12 @@ class SecretFromCSVForm(forms.ModelForm):
         return s
         return s
 
 
 
 
-class SecretImportForm(BulkImportForm, BootstrapMixin):
+class SecretImportForm(BootstrapMixin, BulkImportForm):
     private_key = forms.CharField(widget=forms.HiddenInput())
     private_key = forms.CharField(widget=forms.HiddenInput())
     csv = CSVDataField(csv_form=SecretFromCSVForm, widget=forms.Textarea(attrs={'class': 'requires-private-key'}))
     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)
     pk = forms.ModelMultipleChoiceField(queryset=Secret.objects.all(), widget=forms.MultipleHiddenInput)
     role = forms.ModelChoiceField(queryset=SecretRole.objects.all(), required=False)
     role = forms.ModelChoiceField(queryset=SecretRole.objects.all(), required=False)
     name = forms.CharField(max_length=100, required=False)
     name = forms.CharField(max_length=100, required=False)
@@ -99,7 +99,7 @@ class SecretBulkEditForm(BulkEditForm, BootstrapMixin):
         nullable_fields = ['name']
         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')
     role = FilterChoiceField(queryset=SecretRole.objects.annotate(filter_count=Count('secrets')), to_field_name='slug')
 
 
 
 
@@ -107,7 +107,7 @@ class SecretFilterForm(forms.Form, BootstrapMixin):
 # UserKeys
 # UserKeys
 #
 #
 
 
-class UserKeyForm(forms.ModelForm, BootstrapMixin):
+class UserKeyForm(BootstrapMixin, forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = UserKey
         model = UserKey

+ 2 - 2
netbox/tenancy/forms.py

@@ -11,7 +11,7 @@ from .models import Tenant, TenantGroup
 # Tenant groups
 # Tenant groups
 #
 #
 
 
-class TenantGroupForm(forms.ModelForm, BootstrapMixin):
+class TenantGroupForm(BootstrapMixin, forms.ModelForm):
     slug = SlugField()
     slug = SlugField()
 
 
     class Meta:
     class Meta:
@@ -41,7 +41,7 @@ class TenantFromCSVForm(forms.ModelForm):
         fields = ['name', 'slug', 'group', 'description']
         fields = ['name', 'slug', 'group', 'description']
 
 
 
 
-class TenantImportForm(BulkImportForm, BootstrapMixin):
+class TenantImportForm(BootstrapMixin, BulkImportForm):
     csv = CSVDataField(csv_form=TenantFromCSVForm)
     csv = CSVDataField(csv_form=TenantFromCSVForm)
 
 
 
 

+ 2 - 2
netbox/users/forms.py

@@ -3,7 +3,7 @@ from django.contrib.auth.forms import AuthenticationForm, PasswordChangeForm as
 from utilities.forms import BootstrapMixin
 from utilities.forms import BootstrapMixin
 
 
 
 
-class LoginForm(AuthenticationForm, BootstrapMixin):
+class LoginForm(BootstrapMixin, AuthenticationForm):
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
         super(LoginForm, self).__init__(*args, **kwargs)
         super(LoginForm, self).__init__(*args, **kwargs)
@@ -12,5 +12,5 @@ class LoginForm(AuthenticationForm, BootstrapMixin):
         self.fields['password'].widget.attrs['placeholder'] = ''
         self.fields['password'].widget.attrs['placeholder'] = ''
 
 
 
 
-class PasswordChangeForm(DjangoPasswordChangeForm, BootstrapMixin):
+class PasswordChangeForm(BootstrapMixin, DjangoPasswordChangeForm):
     pass
     pass

+ 1 - 1
netbox/utilities/forms.py

@@ -385,7 +385,7 @@ class BootstrapMixin(forms.BaseForm):
                 field.widget.attrs['placeholder'] = field.label
                 field.widget.attrs['placeholder'] = field.label
 
 
 
 
-class ConfirmationForm(forms.Form, BootstrapMixin):
+class ConfirmationForm(BootstrapMixin, forms.Form):
     confirm = forms.BooleanField(required=True)
     confirm = forms.BooleanField(required=True)