checktheroads 4 лет назад
Родитель
Сommit
c14b546d5f

+ 4 - 4
netbox/circuits/forms.py

@@ -11,7 +11,7 @@ from tenancy.models import Tenant
 from utilities.forms import (
 from utilities.forms import (
     add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField, CSVModelChoiceField, DatePicker,
     add_blank_choice, BootstrapMixin, CommentField, CSVChoiceField, CSVModelChoiceField, DatePicker,
     DynamicModelChoiceField, DynamicModelMultipleChoiceField, SelectSpeedWidget, SmallTextarea, SlugField,
     DynamicModelChoiceField, DynamicModelMultipleChoiceField, SelectSpeedWidget, SmallTextarea, SlugField,
-    StaticSelect2, StaticSelect2Multiple, TagFilterField,
+    StaticSelect, StaticSelectMultiple, TagFilterField,
 )
 )
 from .choices import CircuitStatusChoices
 from .choices import CircuitStatusChoices
 from .models import *
 from .models import *
@@ -274,7 +274,7 @@ class CircuitForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
             'commit_rate': "Committed rate",
             'commit_rate': "Committed rate",
         }
         }
         widgets = {
         widgets = {
-            'status': StaticSelect2(),
+            'status': StaticSelect(),
             'install_date': DatePicker(),
             'install_date': DatePicker(),
             'commit_rate': SelectSpeedWidget(),
             'commit_rate': SelectSpeedWidget(),
         }
         }
@@ -327,7 +327,7 @@ class CircuitBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBul
         choices=add_blank_choice(CircuitStatusChoices),
         choices=add_blank_choice(CircuitStatusChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     tenant = DynamicModelChoiceField(
     tenant = DynamicModelChoiceField(
         queryset=Tenant.objects.all(),
         queryset=Tenant.objects.all(),
@@ -386,7 +386,7 @@ class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilte
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=CircuitStatusChoices,
         choices=CircuitStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     region_id = DynamicModelMultipleChoiceField(
     region_id = DynamicModelMultipleChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),

+ 110 - 110
netbox/dcim/forms.py

@@ -25,7 +25,7 @@ from utilities.forms import (
     APISelect, APISelectMultiple, add_blank_choice, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect,
     APISelect, APISelectMultiple, add_blank_choice, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect,
     ColorField, CommentField, CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVTypedChoiceField,
     ColorField, CommentField, CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, CSVTypedChoiceField,
     DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableNameField, form_from_model, JSONField,
     DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableNameField, form_from_model, JSONField,
-    NumericArrayField, SelectWithPK, SmallTextarea, SlugField, StaticSelect2, StaticSelect2Multiple, TagFilterField,
+    NumericArrayField, SelectWithPK, SmallTextarea, SlugField, StaticSelect, StaticSelectMultiple, TagFilterField,
     BOOLEAN_WITH_BLANK_CHOICES,
     BOOLEAN_WITH_BLANK_CHOICES,
 )
 )
 from virtualization.models import Cluster, ClusterGroup
 from virtualization.models import Cluster, ClusterGroup
@@ -304,7 +304,7 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
     time_zone = TimeZoneFormField(
     time_zone = TimeZoneFormField(
         choices=add_blank_choice(TimeZoneFormField().choices),
         choices=add_blank_choice(TimeZoneFormField().choices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     comments = CommentField()
     comments = CommentField()
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
@@ -340,8 +340,8 @@ class SiteForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
                     'rows': 3,
                     'rows': 3,
                 }
                 }
             ),
             ),
-            'status': StaticSelect2(),
-            'time_zone': StaticSelect2(),
+            'status': StaticSelect(),
+            'time_zone': StaticSelect(),
         }
         }
         help_texts = {
         help_texts = {
             'name': "Full name of the site",
             'name': "Full name of the site",
@@ -404,7 +404,7 @@ class SiteBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
         choices=add_blank_choice(SiteStatusChoices),
         choices=add_blank_choice(SiteStatusChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
@@ -431,7 +431,7 @@ class SiteBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
     time_zone = TimeZoneFormField(
     time_zone = TimeZoneFormField(
         choices=add_blank_choice(TimeZoneFormField().choices),
         choices=add_blank_choice(TimeZoneFormField().choices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
 
 
     class Meta:
     class Meta:
@@ -451,7 +451,7 @@ class SiteFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=SiteStatusChoices,
         choices=SiteStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     region_id = DynamicModelMultipleChoiceField(
     region_id = DynamicModelMultipleChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
@@ -679,10 +679,10 @@ class RackForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
             'u_height': "Height in rack units",
             'u_height': "Height in rack units",
         }
         }
         widgets = {
         widgets = {
-            'status': StaticSelect2(),
-            'type': StaticSelect2(),
-            'width': StaticSelect2(),
-            'outer_unit': StaticSelect2(),
+            'status': StaticSelect(),
+            'type': StaticSelect(),
+            'width': StaticSelect(),
+            'outer_unit': StaticSelect(),
         }
         }
 
 
 
 
@@ -787,7 +787,7 @@ class RackBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
         choices=add_blank_choice(RackStatusChoices),
         choices=add_blank_choice(RackStatusChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     role = DynamicModelChoiceField(
     role = DynamicModelChoiceField(
         queryset=RackRole.objects.all(),
         queryset=RackRole.objects.all(),
@@ -805,12 +805,12 @@ class RackBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(RackTypeChoices),
         choices=add_blank_choice(RackTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     width = forms.ChoiceField(
     width = forms.ChoiceField(
         choices=add_blank_choice(RackWidthChoices),
         choices=add_blank_choice(RackWidthChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     u_height = forms.IntegerField(
     u_height = forms.IntegerField(
         required=False,
         required=False,
@@ -832,7 +832,7 @@ class RackBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
     outer_unit = forms.ChoiceField(
     outer_unit = forms.ChoiceField(
         choices=add_blank_choice(RackDimensionUnitChoices),
         choices=add_blank_choice(RackDimensionUnitChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     comments = CommentField(
     comments = CommentField(
         widget=SmallTextarea,
         widget=SmallTextarea,
@@ -878,17 +878,17 @@ class RackFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=RackStatusChoices,
         choices=RackStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=RackTypeChoices,
         choices=RackTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     width = forms.MultipleChoiceField(
     width = forms.MultipleChoiceField(
         choices=RackWidthChoices,
         choices=RackWidthChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     role_id = DynamicModelMultipleChoiceField(
     role_id = DynamicModelMultipleChoiceField(
         queryset=RackRole.objects.all(),
         queryset=RackRole.objects.all(),
@@ -970,7 +970,7 @@ class RackReservationForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
         queryset=User.objects.order_by(
         queryset=User.objects.order_by(
             'username'
             'username'
         ),
         ),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     tags = DynamicModelMultipleChoiceField(
     tags = DynamicModelMultipleChoiceField(
         queryset=Tag.objects.all(),
         queryset=Tag.objects.all(),
@@ -1049,7 +1049,7 @@ class RackReservationBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomField
             'username'
             'username'
         ),
         ),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     tenant = DynamicModelChoiceField(
     tenant = DynamicModelChoiceField(
         queryset=Tenant.objects.all(),
         queryset=Tenant.objects.all(),
@@ -1166,7 +1166,7 @@ class DeviceTypeForm(BootstrapMixin, CustomFieldModelForm):
             ('Images', ('front_image', 'rear_image')),
             ('Images', ('front_image', 'rear_image')),
         )
         )
         widgets = {
         widgets = {
-            'subdevice_role': StaticSelect2(),
+            'subdevice_role': StaticSelect(),
             'front_image': forms.ClearableFileInput(attrs={
             'front_image': forms.ClearableFileInput(attrs={
                 'accept': DEVICETYPE_IMAGE_FORMATS
                 'accept': DEVICETYPE_IMAGE_FORMATS
             }),
             }),
@@ -1230,47 +1230,47 @@ class DeviceTypeFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     subdevice_role = forms.MultipleChoiceField(
     subdevice_role = forms.MultipleChoiceField(
         choices=add_blank_choice(SubdeviceRoleChoices),
         choices=add_blank_choice(SubdeviceRoleChoices),
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     console_ports = forms.NullBooleanField(
     console_ports = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has console ports',
         label='Has console ports',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     console_server_ports = forms.NullBooleanField(
     console_server_ports = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has console server ports',
         label='Has console server ports',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     power_ports = forms.NullBooleanField(
     power_ports = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has power ports',
         label='Has power ports',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     power_outlets = forms.NullBooleanField(
     power_outlets = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has power outlets',
         label='Has power outlets',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     interfaces = forms.NullBooleanField(
     interfaces = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has interfaces',
         label='Has interfaces',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     pass_through_ports = forms.NullBooleanField(
     pass_through_ports = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has pass-through ports',
         label='Has pass-through ports',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -1318,7 +1318,7 @@ class ConsolePortTemplateForm(BootstrapMixin, forms.ModelForm):
 class ConsolePortTemplateCreateForm(ComponentTemplateCreateForm):
 class ConsolePortTemplateCreateForm(ComponentTemplateCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(ConsolePortTypeChoices),
         choices=add_blank_choice(ConsolePortTypeChoices),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     field_order = ('manufacturer', 'device_type', 'name_pattern', 'label_pattern', 'type', 'description')
     field_order = ('manufacturer', 'device_type', 'name_pattern', 'label_pattern', 'type', 'description')
 
 
@@ -1335,7 +1335,7 @@ class ConsolePortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(ConsolePortTypeChoices),
         choices=add_blank_choice(ConsolePortTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
 
 
     class Meta:
     class Meta:
@@ -1357,7 +1357,7 @@ class ConsoleServerPortTemplateForm(BootstrapMixin, forms.ModelForm):
 class ConsoleServerPortTemplateCreateForm(ComponentTemplateCreateForm):
 class ConsoleServerPortTemplateCreateForm(ComponentTemplateCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(ConsolePortTypeChoices),
         choices=add_blank_choice(ConsolePortTypeChoices),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     field_order = ('manufacturer', 'device_type', 'name_pattern', 'label_pattern', 'type', 'description')
     field_order = ('manufacturer', 'device_type', 'name_pattern', 'label_pattern', 'type', 'description')
 
 
@@ -1374,7 +1374,7 @@ class ConsoleServerPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(ConsolePortTypeChoices),
         choices=add_blank_choice(ConsolePortTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     description = forms.CharField(
     description = forms.CharField(
         required=False
         required=False
@@ -1429,7 +1429,7 @@ class PowerPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PowerPortTypeChoices),
         choices=add_blank_choice(PowerPortTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     maximum_draw = forms.IntegerField(
     maximum_draw = forms.IntegerField(
         min_value=1,
         min_value=1,
@@ -1483,7 +1483,7 @@ class PowerOutletTemplateCreateForm(ComponentTemplateCreateForm):
     feed_leg = forms.ChoiceField(
     feed_leg = forms.ChoiceField(
         choices=add_blank_choice(PowerOutletFeedLegChoices),
         choices=add_blank_choice(PowerOutletFeedLegChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     field_order = (
     field_order = (
         'manufacturer', 'device_type', 'name_pattern', 'label_pattern', 'type', 'power_port', 'feed_leg',
         'manufacturer', 'device_type', 'name_pattern', 'label_pattern', 'type', 'power_port', 'feed_leg',
@@ -1520,7 +1520,7 @@ class PowerOutletTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PowerOutletTypeChoices),
         choices=add_blank_choice(PowerOutletTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     power_port = forms.ModelChoiceField(
     power_port = forms.ModelChoiceField(
         queryset=PowerPortTemplate.objects.all(),
         queryset=PowerPortTemplate.objects.all(),
@@ -1529,7 +1529,7 @@ class PowerOutletTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
     feed_leg = forms.ChoiceField(
     feed_leg = forms.ChoiceField(
         choices=add_blank_choice(PowerOutletFeedLegChoices),
         choices=add_blank_choice(PowerOutletFeedLegChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     description = forms.CharField(
     description = forms.CharField(
         required=False
         required=False
@@ -1559,14 +1559,14 @@ class InterfaceTemplateForm(BootstrapMixin, forms.ModelForm):
         ]
         ]
         widgets = {
         widgets = {
             'device_type': forms.HiddenInput(),
             'device_type': forms.HiddenInput(),
-            'type': StaticSelect2(),
+            'type': StaticSelect(),
         }
         }
 
 
 
 
 class InterfaceTemplateCreateForm(ComponentTemplateCreateForm):
 class InterfaceTemplateCreateForm(ComponentTemplateCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=InterfaceTypeChoices,
         choices=InterfaceTypeChoices,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     mgmt_only = forms.BooleanField(
     mgmt_only = forms.BooleanField(
         required=False,
         required=False,
@@ -1587,7 +1587,7 @@ class InterfaceTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(InterfaceTypeChoices),
         choices=add_blank_choice(InterfaceTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     mgmt_only = forms.NullBooleanField(
     mgmt_only = forms.NullBooleanField(
         required=False,
         required=False,
@@ -1611,7 +1611,7 @@ class FrontPortTemplateForm(BootstrapMixin, forms.ModelForm):
         ]
         ]
         widgets = {
         widgets = {
             'device_type': forms.HiddenInput(),
             'device_type': forms.HiddenInput(),
-            'rear_port': StaticSelect2(),
+            'rear_port': StaticSelect(),
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -1628,7 +1628,7 @@ class FrontPortTemplateForm(BootstrapMixin, forms.ModelForm):
 class FrontPortTemplateCreateForm(ComponentTemplateCreateForm):
 class FrontPortTemplateCreateForm(ComponentTemplateCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=PortTypeChoices,
         choices=PortTypeChoices,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     rear_port_set = forms.MultipleChoiceField(
     rear_port_set = forms.MultipleChoiceField(
         choices=[],
         choices=[],
@@ -1698,7 +1698,7 @@ class FrontPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PortTypeChoices),
         choices=add_blank_choice(PortTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     color = ColorField(
     color = ColorField(
         required=False
         required=False
@@ -1720,14 +1720,14 @@ class RearPortTemplateForm(BootstrapMixin, forms.ModelForm):
         ]
         ]
         widgets = {
         widgets = {
             'device_type': forms.HiddenInput(),
             'device_type': forms.HiddenInput(),
-            'type': StaticSelect2(),
+            'type': StaticSelect(),
         }
         }
 
 
 
 
 class RearPortTemplateCreateForm(ComponentTemplateCreateForm):
 class RearPortTemplateCreateForm(ComponentTemplateCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=PortTypeChoices,
         choices=PortTypeChoices,
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
     )
     )
     color = ColorField(
     color = ColorField(
         required=False
         required=False
@@ -1755,7 +1755,7 @@ class RearPortTemplateBulkEditForm(BootstrapMixin, BulkEditForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PortTypeChoices),
         choices=add_blank_choice(PortTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     color = ColorField(
     color = ColorField(
         required=False
         required=False
@@ -2142,10 +2142,10 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
                                   "config context",
                                   "config context",
         }
         }
         widgets = {
         widgets = {
-            'face': StaticSelect2(),
-            'status': StaticSelect2(),
-            'primary_ip4': StaticSelect2(),
-            'primary_ip6': StaticSelect2(),
+            'face': StaticSelect(),
+            'status': StaticSelect(),
+            'primary_ip4': StaticSelect(),
+            'primary_ip6': StaticSelect(),
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -2405,7 +2405,7 @@ class DeviceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk
     status = forms.ChoiceField(
     status = forms.ChoiceField(
         choices=add_blank_choice(DeviceStatusChoices),
         choices=add_blank_choice(DeviceStatusChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     serial = forms.CharField(
     serial = forms.CharField(
         max_length=50,
         max_length=50,
@@ -2491,7 +2491,7 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=DeviceStatusChoices,
         choices=DeviceStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     asset_tag = forms.CharField(
     asset_tag = forms.CharField(
         required=False
         required=False
@@ -2503,56 +2503,56 @@ class DeviceFilterForm(BootstrapMixin, LocalConfigContextFilterForm, TenancyFilt
     has_primary_ip = forms.NullBooleanField(
     has_primary_ip = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has a primary IP',
         label='Has a primary IP',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     virtual_chassis_member = forms.NullBooleanField(
     virtual_chassis_member = forms.NullBooleanField(
         required=False,
         required=False,
         label='Virtual chassis member',
         label='Virtual chassis member',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     console_ports = forms.NullBooleanField(
     console_ports = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has console ports',
         label='Has console ports',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     console_server_ports = forms.NullBooleanField(
     console_server_ports = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has console server ports',
         label='Has console server ports',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     power_ports = forms.NullBooleanField(
     power_ports = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has power ports',
         label='Has power ports',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     power_outlets = forms.NullBooleanField(
     power_outlets = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has power outlets',
         label='Has power outlets',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     interfaces = forms.NullBooleanField(
     interfaces = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has interfaces',
         label='Has interfaces',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     pass_through_ports = forms.NullBooleanField(
     pass_through_ports = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has pass-through ports',
         label='Has pass-through ports',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -2611,12 +2611,12 @@ class ConsolePortFilterForm(DeviceComponentFilterForm):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=ConsolePortTypeChoices,
         choices=ConsolePortTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     speed = forms.MultipleChoiceField(
     speed = forms.MultipleChoiceField(
         choices=ConsolePortSpeedChoices,
         choices=ConsolePortSpeedChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
@@ -2642,12 +2642,12 @@ class ConsolePortCreateForm(ComponentCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(ConsolePortTypeChoices),
         choices=add_blank_choice(ConsolePortTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     speed = forms.ChoiceField(
     speed = forms.ChoiceField(
         choices=add_blank_choice(ConsolePortSpeedChoices),
         choices=add_blank_choice(ConsolePortSpeedChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     field_order = ('device', 'name_pattern', 'label_pattern', 'type', 'speed', 'mark_connected', 'description', 'tags')
     field_order = ('device', 'name_pattern', 'label_pattern', 'type', 'speed', 'mark_connected', 'description', 'tags')
 
 
@@ -2718,12 +2718,12 @@ class ConsoleServerPortFilterForm(DeviceComponentFilterForm):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=ConsolePortTypeChoices,
         choices=ConsolePortTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     speed = forms.MultipleChoiceField(
     speed = forms.MultipleChoiceField(
         choices=ConsolePortSpeedChoices,
         choices=ConsolePortSpeedChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
@@ -2749,12 +2749,12 @@ class ConsoleServerPortCreateForm(ComponentCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(ConsolePortTypeChoices),
         choices=add_blank_choice(ConsolePortTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     speed = forms.ChoiceField(
     speed = forms.ChoiceField(
         choices=add_blank_choice(ConsolePortSpeedChoices),
         choices=add_blank_choice(ConsolePortSpeedChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     field_order = ('device', 'name_pattern', 'label_pattern', 'type', 'speed', 'mark_connected', 'description', 'tags')
     field_order = ('device', 'name_pattern', 'label_pattern', 'type', 'speed', 'mark_connected', 'description', 'tags')
 
 
@@ -2824,7 +2824,7 @@ class PowerPortFilterForm(DeviceComponentFilterForm):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=PowerPortTypeChoices,
         choices=PowerPortTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
@@ -2851,7 +2851,7 @@ class PowerPortCreateForm(ComponentCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PowerPortTypeChoices),
         choices=add_blank_choice(PowerPortTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     maximum_draw = forms.IntegerField(
     maximum_draw = forms.IntegerField(
         min_value=1,
         min_value=1,
@@ -2929,7 +2929,7 @@ class PowerOutletFilterForm(DeviceComponentFilterForm):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=PowerOutletTypeChoices,
         choices=PowerOutletTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     tag = TagFilterField(model)
     tag = TagFilterField(model)
 
 
@@ -2968,7 +2968,7 @@ class PowerOutletCreateForm(ComponentCreateForm):
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PowerOutletTypeChoices),
         choices=add_blank_choice(PowerOutletTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     power_port = forms.ModelChoiceField(
     power_port = forms.ModelChoiceField(
         queryset=PowerPort.objects.all(),
         queryset=PowerPort.objects.all(),
@@ -3102,17 +3102,17 @@ class InterfaceFilterForm(DeviceComponentFilterForm):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=InterfaceTypeChoices,
         choices=InterfaceTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     enabled = forms.NullBooleanField(
     enabled = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     mgmt_only = forms.NullBooleanField(
     mgmt_only = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -3160,8 +3160,8 @@ class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm):
         ]
         ]
         widgets = {
         widgets = {
             'device': forms.HiddenInput(),
             'device': forms.HiddenInput(),
-            'type': StaticSelect2(),
-            'mode': StaticSelect2(),
+            'type': StaticSelect(),
+            'mode': StaticSelect(),
         }
         }
         labels = {
         labels = {
             'mode': '802.1Q Mode',
             'mode': '802.1Q Mode',
@@ -3192,7 +3192,7 @@ class InterfaceCreateForm(ComponentCreateForm, InterfaceCommonForm):
     model = Interface
     model = Interface
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=InterfaceTypeChoices,
         choices=InterfaceTypeChoices,
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
     )
     )
     enabled = forms.BooleanField(
     enabled = forms.BooleanField(
         required=False,
         required=False,
@@ -3231,7 +3231,7 @@ class InterfaceCreateForm(ComponentCreateForm, InterfaceCommonForm):
     mode = forms.ChoiceField(
     mode = forms.ChoiceField(
         choices=add_blank_choice(InterfaceModeChoices),
         choices=add_blank_choice(InterfaceModeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
     )
     )
     untagged_vlan = DynamicModelChoiceField(
     untagged_vlan = DynamicModelChoiceField(
         queryset=VLAN.objects.all(),
         queryset=VLAN.objects.all(),
@@ -3451,7 +3451,7 @@ class FrontPortFilterForm(DeviceComponentFilterForm):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=PortTypeChoices,
         choices=PortTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     color = ColorField(
     color = ColorField(
         required=False
         required=False
@@ -3473,8 +3473,8 @@ class FrontPortForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
         widgets = {
         widgets = {
             'device': forms.HiddenInput(),
             'device': forms.HiddenInput(),
-            'type': StaticSelect2(),
-            'rear_port': StaticSelect2(),
+            'type': StaticSelect(),
+            'rear_port': StaticSelect(),
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -3492,7 +3492,7 @@ class FrontPortCreateForm(ComponentCreateForm):
     model = FrontPort
     model = FrontPort
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=PortTypeChoices,
         choices=PortTypeChoices,
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
     )
     )
     color = ColorField(
     color = ColorField(
         required=False
         required=False
@@ -3639,7 +3639,7 @@ class RearPortFilterForm(DeviceComponentFilterForm):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=PortTypeChoices,
         choices=PortTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     color = ColorField(
     color = ColorField(
         required=False
         required=False
@@ -3660,7 +3660,7 @@ class RearPortForm(BootstrapMixin, CustomFieldModelForm):
         ]
         ]
         widgets = {
         widgets = {
             'device': forms.HiddenInput(),
             'device': forms.HiddenInput(),
-            'type': StaticSelect2(),
+            'type': StaticSelect(),
         }
         }
 
 
 
 
@@ -3668,7 +3668,7 @@ class RearPortCreateForm(ComponentCreateForm):
     model = RearPort
     model = RearPort
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=PortTypeChoices,
         choices=PortTypeChoices,
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
     )
     )
     color = ColorField(
     color = ColorField(
         required=False
         required=False
@@ -3766,7 +3766,7 @@ class PopulateDeviceBayForm(BootstrapMixin, forms.Form):
         queryset=Device.objects.all(),
         queryset=Device.objects.all(),
         label='Child Device',
         label='Child Device',
         help_text="Child devices must first be created and assigned to the site/rack of the parent device.",
         help_text="Child devices must first be created and assigned to the site/rack of the parent device.",
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
     )
     )
 
 
     def __init__(self, device_bay, *args, **kwargs):
     def __init__(self, device_bay, *args, **kwargs):
@@ -3981,7 +3981,7 @@ class InventoryItemFilterForm(DeviceComponentFilterForm):
     )
     )
     discovered = forms.NullBooleanField(
     discovered = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -4056,9 +4056,9 @@ class ConnectCableToDeviceForm(BootstrapMixin, CustomFieldModelForm):
             'termination_b_id', 'type', 'status', 'label', 'color', 'length', 'length_unit', 'tags',
             'termination_b_id', 'type', 'status', 'label', 'color', 'length', 'length_unit', 'tags',
         ]
         ]
         widgets = {
         widgets = {
-            'status': StaticSelect2,
-            'type': StaticSelect2,
-            'length_unit': StaticSelect2,
+            'status': StaticSelect,
+            'type': StaticSelect,
+            'length_unit': StaticSelect,
         }
         }
 
 
     def clean_termination_b_id(self):
     def clean_termination_b_id(self):
@@ -4276,9 +4276,9 @@ class CableForm(BootstrapMixin, CustomFieldModelForm):
             'type', 'status', 'label', 'color', 'length', 'length_unit', 'tags',
             'type', 'status', 'label', 'color', 'length', 'length_unit', 'tags',
         ]
         ]
         widgets = {
         widgets = {
-            'status': StaticSelect2,
-            'type': StaticSelect2,
-            'length_unit': StaticSelect2,
+            'status': StaticSelect,
+            'type': StaticSelect,
+            'length_unit': StaticSelect,
         }
         }
         error_messages = {
         error_messages = {
             'length': {
             'length': {
@@ -4391,12 +4391,12 @@ class CableBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkE
         choices=add_blank_choice(CableTypeChoices),
         choices=add_blank_choice(CableTypeChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     status = forms.ChoiceField(
     status = forms.ChoiceField(
         choices=add_blank_choice(CableStatusChoices),
         choices=add_blank_choice(CableStatusChoices),
         required=False,
         required=False,
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
         initial=''
         initial=''
     )
     )
     label = forms.CharField(
     label = forms.CharField(
@@ -4414,7 +4414,7 @@ class CableBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkE
         choices=add_blank_choice(CableLengthUnitChoices),
         choices=add_blank_choice(CableLengthUnitChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
 
 
     class Meta:
     class Meta:
@@ -4472,12 +4472,12 @@ class CableFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=add_blank_choice(CableTypeChoices),
         choices=add_blank_choice(CableTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     status = forms.ChoiceField(
     status = forms.ChoiceField(
         required=False,
         required=False,
         choices=add_blank_choice(CableStatusChoices),
         choices=add_blank_choice(CableStatusChoices),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     color = ColorField(
     color = ColorField(
         required=False
         required=False
@@ -5045,10 +5045,10 @@ class PowerFeedForm(BootstrapMixin, CustomFieldModelForm):
             ('Characteristics', ('supply', 'voltage', 'amperage', 'phase', 'max_utilization')),
             ('Characteristics', ('supply', 'voltage', 'amperage', 'phase', 'max_utilization')),
         )
         )
         widgets = {
         widgets = {
-            'status': StaticSelect2(),
-            'type': StaticSelect2(),
-            'supply': StaticSelect2(),
-            'phase': StaticSelect2(),
+            'status': StaticSelect(),
+            'type': StaticSelect(),
+            'supply': StaticSelect(),
+            'phase': StaticSelect(),
         }
         }
 
 
 
 
@@ -5141,25 +5141,25 @@ class PowerFeedBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelB
         choices=add_blank_choice(PowerFeedStatusChoices),
         choices=add_blank_choice(PowerFeedStatusChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PowerFeedTypeChoices),
         choices=add_blank_choice(PowerFeedTypeChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     supply = forms.ChoiceField(
     supply = forms.ChoiceField(
         choices=add_blank_choice(PowerFeedSupplyChoices),
         choices=add_blank_choice(PowerFeedSupplyChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     phase = forms.ChoiceField(
     phase = forms.ChoiceField(
         choices=add_blank_choice(PowerFeedPhaseChoices),
         choices=add_blank_choice(PowerFeedPhaseChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     voltage = forms.IntegerField(
     voltage = forms.IntegerField(
         required=False
         required=False
@@ -5233,22 +5233,22 @@ class PowerFeedFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=PowerFeedStatusChoices,
         choices=PowerFeedStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     type = forms.ChoiceField(
     type = forms.ChoiceField(
         choices=add_blank_choice(PowerFeedTypeChoices),
         choices=add_blank_choice(PowerFeedTypeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     supply = forms.ChoiceField(
     supply = forms.ChoiceField(
         choices=add_blank_choice(PowerFeedSupplyChoices),
         choices=add_blank_choice(PowerFeedSupplyChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     phase = forms.ChoiceField(
     phase = forms.ChoiceField(
         choices=add_blank_choice(PowerFeedPhaseChoices),
         choices=add_blank_choice(PowerFeedPhaseChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     voltage = forms.IntegerField(
     voltage = forms.IntegerField(
         required=False
         required=False

+ 16 - 16
netbox/extras/forms.py

@@ -9,8 +9,8 @@ from tenancy.models import Tenant, TenantGroup
 from utilities.forms import (
 from utilities.forms import (
     add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorField,
     add_blank_choice, APISelectMultiple, BootstrapMixin, BulkEditForm, BulkEditNullBooleanSelect, ColorField,
     CommentField, ContentTypeChoiceField, ContentTypeMultipleChoiceField, CSVContentTypeField, CSVModelForm,
     CommentField, ContentTypeChoiceField, ContentTypeMultipleChoiceField, CSVContentTypeField, CSVModelForm,
-    CSVMultipleContentTypeField, DateTimePicker, DynamicModelMultipleChoiceField, JSONField, SlugField, StaticSelect2,
-    StaticSelect2Multiple, BOOLEAN_WITH_BLANK_CHOICES,
+    CSVMultipleContentTypeField, DateTimePicker, DynamicModelMultipleChoiceField, JSONField, SlugField, StaticSelect,
+    StaticSelectMultiple, BOOLEAN_WITH_BLANK_CHOICES,
 )
 )
 from virtualization.models import Cluster, ClusterGroup
 from virtualization.models import Cluster, ClusterGroup
 from .choices import *
 from .choices import *
@@ -87,14 +87,14 @@ class CustomFieldFilterForm(BootstrapMixin, forms.Form):
     type = forms.MultipleChoiceField(
     type = forms.MultipleChoiceField(
         choices=CustomFieldTypeChoices,
         choices=CustomFieldTypeChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     weight = forms.IntegerField(
     weight = forms.IntegerField(
         required=False
         required=False
     )
     )
     required = forms.NullBooleanField(
     required = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -153,7 +153,7 @@ class CustomLinkBulkEditForm(BootstrapMixin, BulkEditForm):
     button_class = forms.ChoiceField(
     button_class = forms.ChoiceField(
         choices=CustomLinkButtonClassChoices,
         choices=CustomLinkButtonClassChoices,
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
 
 
     class Meta:
     class Meta:
@@ -174,7 +174,7 @@ class CustomLinkFilterForm(BootstrapMixin, forms.Form):
     )
     )
     new_window = forms.NullBooleanField(
     new_window = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -262,7 +262,7 @@ class ExportTemplateFilterForm(BootstrapMixin, forms.Form):
     )
     )
     as_attachment = forms.NullBooleanField(
     as_attachment = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -363,29 +363,29 @@ class WebhookFilterForm(BootstrapMixin, forms.Form):
     http_method = forms.MultipleChoiceField(
     http_method = forms.MultipleChoiceField(
         choices=WebhookHttpMethodChoices,
         choices=WebhookHttpMethodChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     enabled = forms.NullBooleanField(
     enabled = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     type_create = forms.NullBooleanField(
     type_create = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     type_update = forms.NullBooleanField(
     type_update = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     type_delete = forms.NullBooleanField(
     type_delete = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -734,7 +734,7 @@ class LocalConfigContextFilterForm(forms.Form):
     local_context_data = forms.NullBooleanField(
     local_context_data = forms.NullBooleanField(
         required=False,
         required=False,
         label=_('Has local config context data'),
         label=_('Has local config context data'),
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -763,7 +763,7 @@ class JournalEntryForm(BootstrapMixin, forms.ModelForm):
     kind = forms.ChoiceField(
     kind = forms.ChoiceField(
         choices=add_blank_choice(JournalEntryKindChoices),
         choices=add_blank_choice(JournalEntryKindChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
 
 
     class Meta:
     class Meta:
@@ -828,7 +828,7 @@ class JournalEntryFilterForm(BootstrapMixin, forms.Form):
     kind = forms.ChoiceField(
     kind = forms.ChoiceField(
         choices=add_blank_choice(JournalEntryKindChoices),
         choices=add_blank_choice(JournalEntryKindChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
 
 
 
 
@@ -855,7 +855,7 @@ class ObjectChangeFilterForm(BootstrapMixin, forms.Form):
     action = forms.ChoiceField(
     action = forms.ChoiceField(
         choices=add_blank_choice(ObjectChangeActionChoices),
         choices=add_blank_choice(ObjectChangeActionChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     user_id = DynamicModelMultipleChoiceField(
     user_id = DynamicModelMultipleChoiceField(
         queryset=User.objects.all(),
         queryset=User.objects.all(),

+ 4 - 4
netbox/extras/models/customfields.py

@@ -13,7 +13,7 @@ from extras.choices import *
 from extras.utils import FeatureQuery, extras_features
 from extras.utils import FeatureQuery, extras_features
 from netbox.models import ChangeLoggedModel
 from netbox.models import ChangeLoggedModel
 from utilities.forms import (
 from utilities.forms import (
-    CSVChoiceField, DatePicker, LaxURLField, StaticSelect2Multiple, StaticSelect2, add_blank_choice,
+    CSVChoiceField, DatePicker, LaxURLField, StaticSelectMultiple, StaticSelect, add_blank_choice,
 )
 )
 from utilities.querysets import RestrictedQuerySet
 from utilities.querysets import RestrictedQuerySet
 from utilities.validators import validate_regex
 from utilities.validators import validate_regex
@@ -226,7 +226,7 @@ class CustomField(ChangeLoggedModel):
                 (False, 'False'),
                 (False, 'False'),
             )
             )
             field = forms.NullBooleanField(
             field = forms.NullBooleanField(
-                required=required, initial=initial, widget=StaticSelect2(choices=choices)
+                required=required, initial=initial, widget=StaticSelect(choices=choices)
             )
             )
 
 
         # Date
         # Date
@@ -248,12 +248,12 @@ class CustomField(ChangeLoggedModel):
             if self.type == CustomFieldTypeChoices.TYPE_SELECT:
             if self.type == CustomFieldTypeChoices.TYPE_SELECT:
                 field_class = CSVChoiceField if for_csv_import else forms.ChoiceField
                 field_class = CSVChoiceField if for_csv_import else forms.ChoiceField
                 field = field_class(
                 field = field_class(
-                    choices=choices, required=required, initial=initial, widget=StaticSelect2()
+                    choices=choices, required=required, initial=initial, widget=StaticSelect()
                 )
                 )
             else:
             else:
                 field_class = CSVChoiceField if for_csv_import else forms.MultipleChoiceField
                 field_class = CSVChoiceField if for_csv_import else forms.MultipleChoiceField
                 field = field_class(
                 field = field_class(
-                    choices=choices, required=required, initial=initial, widget=StaticSelect2Multiple()
+                    choices=choices, required=required, initial=initial, widget=StaticSelectMultiple()
                 )
                 )
 
 
         # URL
         # URL

+ 31 - 31
netbox/ipam/forms.py

@@ -12,7 +12,7 @@ from tenancy.models import Tenant
 from utilities.forms import (
 from utilities.forms import (
     add_blank_choice, BootstrapMixin, BulkEditNullBooleanSelect, ContentTypeChoiceField, CSVChoiceField,
     add_blank_choice, BootstrapMixin, BulkEditNullBooleanSelect, ContentTypeChoiceField, CSVChoiceField,
     CSVModelChoiceField, DatePicker, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableIPAddressField,
     CSVModelChoiceField, DatePicker, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableIPAddressField,
-    NumericArrayField, ReturnURLForm, SlugField, StaticSelect2, StaticSelect2Multiple, TagFilterField,
+    NumericArrayField, ReturnURLForm, SlugField, StaticSelect, StaticSelectMultiple, TagFilterField,
     BOOLEAN_WITH_BLANK_CHOICES,
     BOOLEAN_WITH_BLANK_CHOICES,
 )
 )
 from virtualization.models import Cluster, ClusterGroup, VirtualMachine, VMInterface
 from virtualization.models import Cluster, ClusterGroup, VirtualMachine, VMInterface
@@ -242,7 +242,7 @@ class RIRFilterForm(BootstrapMixin, forms.Form):
     is_private = forms.NullBooleanField(
     is_private = forms.NullBooleanField(
         required=False,
         required=False,
         label=_('Private'),
         label=_('Private'),
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -340,7 +340,7 @@ class AggregateFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFil
         required=False,
         required=False,
         choices=add_blank_choice(IPAddressFamilyChoices),
         choices=add_blank_choice(IPAddressFamilyChoices),
         label=_('Address family'),
         label=_('Address family'),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     rir_id = DynamicModelMultipleChoiceField(
     rir_id = DynamicModelMultipleChoiceField(
         queryset=RIR.objects.all(),
         queryset=RIR.objects.all(),
@@ -464,7 +464,7 @@ class PrefixForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
             ('Tenancy', ('tenant_group', 'tenant')),
             ('Tenancy', ('tenant_group', 'tenant')),
         )
         )
         widgets = {
         widgets = {
-            'status': StaticSelect2(),
+            'status': StaticSelect(),
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -575,7 +575,7 @@ class PrefixBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulk
     status = forms.ChoiceField(
     status = forms.ChoiceField(
         choices=add_blank_choice(PrefixStatusChoices),
         choices=add_blank_choice(PrefixStatusChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     role = DynamicModelChoiceField(
     role = DynamicModelChoiceField(
         queryset=Role.objects.all(),
         queryset=Role.objects.all(),
@@ -630,13 +630,13 @@ class PrefixFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilter
         required=False,
         required=False,
         choices=add_blank_choice(IPAddressFamilyChoices),
         choices=add_blank_choice(IPAddressFamilyChoices),
         label=_('Address family'),
         label=_('Address family'),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     mask_length = forms.ChoiceField(
     mask_length = forms.ChoiceField(
         required=False,
         required=False,
         choices=PREFIX_MASK_LENGTH_CHOICES,
         choices=PREFIX_MASK_LENGTH_CHOICES,
         label=_('Mask length'),
         label=_('Mask length'),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     vrf_id = DynamicModelMultipleChoiceField(
     vrf_id = DynamicModelMultipleChoiceField(
         queryset=VRF.objects.all(),
         queryset=VRF.objects.all(),
@@ -652,7 +652,7 @@ class PrefixFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilter
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=PrefixStatusChoices,
         choices=PrefixStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     region_id = DynamicModelMultipleChoiceField(
     region_id = DynamicModelMultipleChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
@@ -682,14 +682,14 @@ class PrefixFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilter
     is_pool = forms.NullBooleanField(
     is_pool = forms.NullBooleanField(
         required=False,
         required=False,
         label=_('Is a pool'),
         label=_('Is a pool'),
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
     mark_utilized = forms.NullBooleanField(
     mark_utilized = forms.NullBooleanField(
         required=False,
         required=False,
         label=_('Marked as 100% utilized'),
         label=_('Marked as 100% utilized'),
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -961,8 +961,8 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
             'tags',
             'tags',
         ]
         ]
         widgets = {
         widgets = {
-            'status': StaticSelect2(),
-            'role': StaticSelect2(),
+            'status': StaticSelect(),
+            'role': StaticSelect(),
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -1061,8 +1061,8 @@ class IPAddressBulkAddForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
             'address', 'vrf', 'status', 'role', 'dns_name', 'description', 'tenant_group', 'tenant', 'tags',
             'address', 'vrf', 'status', 'role', 'dns_name', 'description', 'tenant_group', 'tenant', 'tags',
         ]
         ]
         widgets = {
         widgets = {
-            'status': StaticSelect2(),
-            'role': StaticSelect2(),
+            'status': StaticSelect(),
+            'role': StaticSelect(),
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -1193,12 +1193,12 @@ class IPAddressBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelB
     status = forms.ChoiceField(
     status = forms.ChoiceField(
         choices=add_blank_choice(IPAddressStatusChoices),
         choices=add_blank_choice(IPAddressStatusChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     role = forms.ChoiceField(
     role = forms.ChoiceField(
         choices=add_blank_choice(IPAddressRoleChoices),
         choices=add_blank_choice(IPAddressRoleChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     dns_name = forms.CharField(
     dns_name = forms.CharField(
         max_length=255,
         max_length=255,
@@ -1253,13 +1253,13 @@ class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFil
         required=False,
         required=False,
         choices=add_blank_choice(IPAddressFamilyChoices),
         choices=add_blank_choice(IPAddressFamilyChoices),
         label=_('Address family'),
         label=_('Address family'),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     mask_length = forms.ChoiceField(
     mask_length = forms.ChoiceField(
         required=False,
         required=False,
         choices=IPADDRESS_MASK_LENGTH_CHOICES,
         choices=IPADDRESS_MASK_LENGTH_CHOICES,
         label=_('Mask length'),
         label=_('Mask length'),
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     vrf_id = DynamicModelMultipleChoiceField(
     vrf_id = DynamicModelMultipleChoiceField(
         queryset=VRF.objects.all(),
         queryset=VRF.objects.all(),
@@ -1275,17 +1275,17 @@ class IPAddressFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFil
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=IPAddressStatusChoices,
         choices=IPAddressStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     role = forms.MultipleChoiceField(
     role = forms.MultipleChoiceField(
         choices=IPAddressRoleChoices,
         choices=IPAddressRoleChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     assigned_to_interface = forms.NullBooleanField(
     assigned_to_interface = forms.NullBooleanField(
         required=False,
         required=False,
         label=_('Assigned to an interface'),
         label=_('Assigned to an interface'),
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -1300,7 +1300,7 @@ class VLANGroupForm(BootstrapMixin, 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,
-        widget=StaticSelect2
+        widget=StaticSelect
     )
     )
     region = DynamicModelChoiceField(
     region = DynamicModelChoiceField(
         queryset=Region.objects.all(),
         queryset=Region.objects.all(),
@@ -1370,7 +1370,7 @@ class VLANGroupForm(BootstrapMixin, CustomFieldModelForm):
             'clustergroup', 'cluster',
             'clustergroup', 'cluster',
         ]
         ]
         widgets = {
         widgets = {
-            'scope_type': StaticSelect2,
+            'scope_type': StaticSelect,
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -1481,7 +1481,7 @@ class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
             ('virtualization.cluster', 'Cluster'),
             ('virtualization.cluster', 'Cluster'),
         ),
         ),
         required=False,
         required=False,
-        widget=StaticSelect2,
+        widget=StaticSelect,
         label='Group scope'
         label='Group scope'
     )
     )
     group = DynamicModelChoiceField(
     group = DynamicModelChoiceField(
@@ -1544,7 +1544,7 @@ class VLANForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
             'role': "The primary function of this VLAN",
             'role': "The primary function of this VLAN",
         }
         }
         widgets = {
         widgets = {
-            'status': StaticSelect2(),
+            'status': StaticSelect(),
         }
         }
 
 
 
 
@@ -1622,7 +1622,7 @@ class VLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEd
     status = forms.ChoiceField(
     status = forms.ChoiceField(
         choices=add_blank_choice(VLANStatusChoices),
         choices=add_blank_choice(VLANStatusChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     role = DynamicModelChoiceField(
     role = DynamicModelChoiceField(
         queryset=Role.objects.all(),
         queryset=Role.objects.all(),
@@ -1680,7 +1680,7 @@ class VLANFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldModelFilterFo
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=VLANStatusChoices,
         choices=VLANStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     role_id = DynamicModelMultipleChoiceField(
     role_id = DynamicModelMultipleChoiceField(
         queryset=Role.objects.all(),
         queryset=Role.objects.all(),
@@ -1718,8 +1718,8 @@ class ServiceForm(BootstrapMixin, CustomFieldModelForm):
                            "reachable via all IPs assigned to the device.",
                            "reachable via all IPs assigned to the device.",
         }
         }
         widgets = {
         widgets = {
-            'protocol': StaticSelect2(),
-            'ipaddresses': StaticSelect2Multiple(),
+            'protocol': StaticSelect(),
+            'ipaddresses': StaticSelectMultiple(),
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -1743,7 +1743,7 @@ class ServiceFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
     protocol = forms.ChoiceField(
     protocol = forms.ChoiceField(
         choices=add_blank_choice(ServiceProtocolChoices),
         choices=add_blank_choice(ServiceProtocolChoices),
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     port = forms.IntegerField(
     port = forms.IntegerField(
         required=False,
         required=False,
@@ -1782,7 +1782,7 @@ class ServiceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBul
     protocol = forms.ChoiceField(
     protocol = forms.ChoiceField(
         choices=add_blank_choice(ServiceProtocolChoices),
         choices=add_blank_choice(ServiceProtocolChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     ports = NumericArrayField(
     ports = NumericArrayField(
         base_field=forms.IntegerField(
         base_field=forms.IntegerField(

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
netbox/project-static/dist/netbox.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
netbox/project-static/dist/netbox.js.map


+ 1 - 1
netbox/project-static/src/select/api.ts

@@ -185,7 +185,7 @@ function getDisplayName(result: APIObjectBase, select: HTMLSelectElement): strin
  * Initialize select elements that rely on the NetBox API to build their options.
  * Initialize select elements that rely on the NetBox API to build their options.
  */
  */
 export function initApiSelect() {
 export function initApiSelect() {
-  for (const select of getElements<HTMLSelectElement>('.netbox-select2-api')) {
+  for (const select of getElements<HTMLSelectElement>('.netbox-api-select')) {
     const dependencies = getDependencyIds(select);
     const dependencies = getDependencyIds(select);
     // Initialize an event, so other elements relying on this element can subscribe to this
     // Initialize an event, so other elements relying on this element can subscribe to this
     // element's value.
     // element's value.

+ 1 - 1
netbox/project-static/src/select/color.ts

@@ -16,7 +16,7 @@ function canChangeColor(option: Option | HTMLOptionElement): boolean {
  * the selected option.
  * the selected option.
  */
  */
 export function initColorSelect(): void {
 export function initColorSelect(): void {
-  for (const select of getElements<HTMLSelectElement>('select.netbox-select2-color-picker')) {
+  for (const select of getElements<HTMLSelectElement>('select.netbox-color-select')) {
     for (const option of select.options) {
     for (const option of select.options) {
       if (canChangeColor(option)) {
       if (canChangeColor(option)) {
         // Get the background color from the option's value.
         // Get the background color from the option's value.

+ 1 - 1
netbox/project-static/src/select/static.ts

@@ -2,7 +2,7 @@ import SlimSelect from 'slim-select';
 import { getElements } from '../util';
 import { getElements } from '../util';
 
 
 export function initStaticSelect() {
 export function initStaticSelect() {
-  for (const select of getElements<HTMLSelectElement>('.netbox-select2-static')) {
+  for (const select of getElements<HTMLSelectElement>('.netbox-select-static')) {
     if (select !== null) {
     if (select !== null) {
       const label = document.querySelector(`label[for=${select.id}]`) as HTMLLabelElement;
       const label = document.querySelector(`label[for=${select.id}]`) as HTMLLabelElement;
 
 

+ 1 - 1
netbox/utilities/forms/fields.py

@@ -85,7 +85,7 @@ class TagFilterField(forms.MultipleChoiceField):
 
 
     :param model: The model of the filter
     :param model: The model of the filter
     """
     """
-    widget = widgets.StaticSelect2Multiple
+    widget = widgets.StaticSelectMultiple
 
 
     def __init__(self, model, *args, **kwargs):
     def __init__(self, model, *args, **kwargs):
         def get_choices():
         def get_choices():

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

@@ -4,7 +4,7 @@ import re
 import yaml
 import yaml
 from django import forms
 from django import forms
 
 
-from .widgets import APISelect, APISelectMultiple, StaticSelect2
+from .widgets import APISelect, APISelectMultiple, StaticSelect
 
 
 
 
 __all__ = (
 __all__ = (
@@ -35,7 +35,7 @@ class BootstrapMixin(forms.BaseForm):
             forms.Select,
             forms.Select,
             APISelect,
             APISelect,
             APISelectMultiple,
             APISelectMultiple,
-            StaticSelect2,
+            StaticSelect,
         ]
         ]
 
 
         for field_name, field in self.fields.items():
         for field_name, field in self.fields.items():

+ 11 - 11
netbox/utilities/forms/widgets.py

@@ -21,8 +21,8 @@ __all__ = (
     'SelectWithPK',
     'SelectWithPK',
     'SlugWidget',
     'SlugWidget',
     'SmallTextarea',
     'SmallTextarea',
-    'StaticSelect2',
-    'StaticSelect2Multiple',
+    'StaticSelect',
+    'StaticSelectMultiple',
     'TimePicker',
     'TimePicker',
 )
 )
 
 
@@ -50,7 +50,7 @@ class ColorSelect(forms.Select):
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
         kwargs['choices'] = add_blank_choice(ColorChoices)
         kwargs['choices'] = add_blank_choice(ColorChoices)
         super().__init__(*args, **kwargs)
         super().__init__(*args, **kwargs)
-        self.attrs['class'] = 'netbox-select2-color-picker'
+        self.attrs['class'] = 'netbox-color-select'
 
 
 
 
 class BulkEditNullBooleanSelect(forms.NullBooleanSelect):
 class BulkEditNullBooleanSelect(forms.NullBooleanSelect):
@@ -67,7 +67,7 @@ class BulkEditNullBooleanSelect(forms.NullBooleanSelect):
             ('2', 'Yes'),
             ('2', 'Yes'),
             ('3', 'No'),
             ('3', 'No'),
         )
         )
-        self.attrs['class'] = 'netbox-select2-static'
+        self.attrs['class'] = 'netbox-static-select'
 
 
 
 
 class SelectWithDisabled(forms.Select):
 class SelectWithDisabled(forms.Select):
@@ -78,17 +78,17 @@ class SelectWithDisabled(forms.Select):
     option_template_name = 'widgets/selectwithdisabled_option.html'
     option_template_name = 'widgets/selectwithdisabled_option.html'
 
 
 
 
-class StaticSelect2(SelectWithDisabled):
+class StaticSelect(SelectWithDisabled):
     """
     """
-    A static <select> form widget using the Select2 library.
+    A static <select/> form widget which is client-side rendered.
     """
     """
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         super().__init__(*args, **kwargs)
 
 
-        self.attrs['class'] = 'netbox-select2-static'
+        self.attrs['class'] = 'netbox-static-select'
 
 
 
 
-class StaticSelect2Multiple(StaticSelect2, forms.SelectMultiple):
+class StaticSelectMultiple(StaticSelect, forms.SelectMultiple):
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         super().__init__(*args, **kwargs)
@@ -96,14 +96,14 @@ class StaticSelect2Multiple(StaticSelect2, forms.SelectMultiple):
         self.attrs['data-multiple'] = 1
         self.attrs['data-multiple'] = 1
 
 
 
 
-class SelectWithPK(StaticSelect2):
+class SelectWithPK(StaticSelect):
     """
     """
     Include the primary key of each option in the option label (e.g. "Router7 (4721)").
     Include the primary key of each option in the option label (e.g. "Router7 (4721)").
     """
     """
     option_template_name = 'widgets/select_option_with_pk.html'
     option_template_name = 'widgets/select_option_with_pk.html'
 
 
 
 
-class ContentTypeSelect(StaticSelect2):
+class ContentTypeSelect(StaticSelect):
     """
     """
     Appends an `api-value` attribute equal to the slugified model name for each ContentType. For example:
     Appends an `api-value` attribute equal to the slugified model name for each ContentType. For example:
         <option value="37" api-value="console-server-port">console server port</option>
         <option value="37" api-value="console-server-port">console server port</option>
@@ -138,7 +138,7 @@ class APISelect(SelectWithDisabled):
     def __init__(self, api_url=None, full=False, *args, **kwargs):
     def __init__(self, api_url=None, full=False, *args, **kwargs):
         super().__init__(*args, **kwargs)
         super().__init__(*args, **kwargs)
 
 
-        self.attrs['class'] = 'netbox-select2-api'
+        self.attrs['class'] = 'netbox-api-select'
         if api_url:
         if api_url:
             self.attrs['data-url'] = '/{}{}'.format(settings.BASE_PATH, api_url.lstrip('/'))  # Inject BASE_PATH
             self.attrs['data-url'] = '/{}{}'.format(settings.BASE_PATH, api_url.lstrip('/'))  # Inject BASE_PATH
 
 

+ 11 - 11
netbox/virtualization/forms.py

@@ -18,7 +18,7 @@ from tenancy.models import Tenant
 from utilities.forms import (
 from utilities.forms import (
     add_blank_choice, BootstrapMixin, BulkEditNullBooleanSelect, BulkRenameForm, CommentField, ConfirmationForm,
     add_blank_choice, BootstrapMixin, BulkEditNullBooleanSelect, BulkRenameForm, CommentField, ConfirmationForm,
     CSVChoiceField, CSVModelChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableNameField,
     CSVChoiceField, CSVModelChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, ExpandableNameField,
-    form_from_model, JSONField, SlugField, SmallTextarea, StaticSelect2, StaticSelect2Multiple, TagFilterField,
+    form_from_model, JSONField, SlugField, SmallTextarea, StaticSelect, StaticSelectMultiple, TagFilterField,
     BOOLEAN_WITH_BLANK_CHOICES,
     BOOLEAN_WITH_BLANK_CHOICES,
 )
 )
 from .choices import *
 from .choices import *
@@ -389,9 +389,9 @@ class VirtualMachineForm(BootstrapMixin, TenancyForm, CustomFieldModelForm):
                                   "config context",
                                   "config context",
         }
         }
         widgets = {
         widgets = {
-            "status": StaticSelect2(),
-            'primary_ip4': StaticSelect2(),
-            'primary_ip6': StaticSelect2(),
+            "status": StaticSelect(),
+            'primary_ip4': StaticSelect(),
+            'primary_ip6': StaticSelect(),
         }
         }
 
 
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
@@ -483,7 +483,7 @@ class VirtualMachineBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldM
         choices=add_blank_choice(VirtualMachineStatusChoices),
         choices=add_blank_choice(VirtualMachineStatusChoices),
         required=False,
         required=False,
         initial='',
         initial='',
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
     )
     )
     cluster = DynamicModelChoiceField(
     cluster = DynamicModelChoiceField(
         queryset=Cluster.objects.all(),
         queryset=Cluster.objects.all(),
@@ -592,7 +592,7 @@ class VirtualMachineFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldMod
     status = forms.MultipleChoiceField(
     status = forms.MultipleChoiceField(
         choices=VirtualMachineStatusChoices,
         choices=VirtualMachineStatusChoices,
         required=False,
         required=False,
-        widget=StaticSelect2Multiple()
+        widget=StaticSelectMultiple()
     )
     )
     platform_id = DynamicModelMultipleChoiceField(
     platform_id = DynamicModelMultipleChoiceField(
         queryset=Platform.objects.all(),
         queryset=Platform.objects.all(),
@@ -607,7 +607,7 @@ class VirtualMachineFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldMod
     has_primary_ip = forms.NullBooleanField(
     has_primary_ip = forms.NullBooleanField(
         required=False,
         required=False,
         label='Has a primary IP',
         label='Has a primary IP',
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )
@@ -647,7 +647,7 @@ class VMInterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm)
         ]
         ]
         widgets = {
         widgets = {
             'virtual_machine': forms.HiddenInput(),
             'virtual_machine': forms.HiddenInput(),
-            'mode': StaticSelect2()
+            'mode': StaticSelect()
         }
         }
         labels = {
         labels = {
             'mode': '802.1Q Mode',
             'mode': '802.1Q Mode',
@@ -704,7 +704,7 @@ class VMInterfaceCreateForm(BootstrapMixin, CustomFieldsMixin, InterfaceCommonFo
     mode = forms.ChoiceField(
     mode = forms.ChoiceField(
         choices=add_blank_choice(InterfaceModeChoices),
         choices=add_blank_choice(InterfaceModeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2(),
+        widget=StaticSelect(),
     )
     )
     untagged_vlan = DynamicModelChoiceField(
     untagged_vlan = DynamicModelChoiceField(
         queryset=VLAN.objects.all(),
         queryset=VLAN.objects.all(),
@@ -789,7 +789,7 @@ class VMInterfaceBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldMode
     mode = forms.ChoiceField(
     mode = forms.ChoiceField(
         choices=add_blank_choice(InterfaceModeChoices),
         choices=add_blank_choice(InterfaceModeChoices),
         required=False,
         required=False,
-        widget=StaticSelect2()
+        widget=StaticSelect()
     )
     )
     untagged_vlan = DynamicModelChoiceField(
     untagged_vlan = DynamicModelChoiceField(
         queryset=VLAN.objects.all(),
         queryset=VLAN.objects.all(),
@@ -868,7 +868,7 @@ class VMInterfaceFilterForm(BootstrapMixin, forms.Form):
     )
     )
     enabled = forms.NullBooleanField(
     enabled = forms.NullBooleanField(
         required=False,
         required=False,
-        widget=StaticSelect2(
+        widget=StaticSelect(
             choices=BOOLEAN_WITH_BLANK_CHOICES
             choices=BOOLEAN_WITH_BLANK_CHOICES
         )
         )
     )
     )

Некоторые файлы не были показаны из-за большого количества измененных файлов