mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
select2 for all create/edit forms in dcim
This commit is contained in:
@ -88,6 +88,11 @@ class RegionForm(BootstrapMixin, forms.ModelForm):
|
||||
fields = [
|
||||
'parent', 'name', 'slug',
|
||||
]
|
||||
widgets = {
|
||||
'parent': APISelect(
|
||||
api_url="/api/dcim/regions/"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
class RegionCSVForm(forms.ModelForm):
|
||||
@ -281,6 +286,11 @@ class RackGroupForm(BootstrapMixin, forms.ModelForm):
|
||||
fields = [
|
||||
'site', 'name', 'slug',
|
||||
]
|
||||
widgets = {
|
||||
'site': APISelect(
|
||||
api_url="/api/dcim/sites/"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
class RackGroupCSVForm(forms.ModelForm):
|
||||
@ -349,7 +359,7 @@ class RackForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
||||
),
|
||||
required=False,
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/rack-groups/?site_id={{site}}',
|
||||
api_url='/api/dcim/rack-groups/',
|
||||
)
|
||||
)
|
||||
comments = CommentField()
|
||||
@ -370,11 +380,19 @@ class RackForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
||||
'u_height': "Height in rack units",
|
||||
}
|
||||
widgets = {
|
||||
'site': forms.Select(
|
||||
attrs={
|
||||
'filter-for': 'group',
|
||||
'site': APISelect(
|
||||
api_url="/api/dcim/sites/",
|
||||
filter_for={
|
||||
'group': 'site_id',
|
||||
}
|
||||
),
|
||||
'status': StaticSelect2(),
|
||||
'role': APISelect(
|
||||
api_url="/api/dcim/rack-roles/"
|
||||
),
|
||||
'type': StaticSelect2(),
|
||||
'width': StaticSelect2(),
|
||||
'outer_unit': StaticSelect2(),
|
||||
}
|
||||
|
||||
|
||||
@ -724,6 +742,12 @@ class DeviceTypeForm(BootstrapMixin, CustomFieldForm):
|
||||
'manufacturer', 'model', 'slug', 'part_number', 'u_height', 'is_full_depth', 'subdevice_role', 'comments',
|
||||
'tags',
|
||||
]
|
||||
widgets = {
|
||||
'manufacturer': APISelect(
|
||||
api_url="/api/dcim/manufacturers/"
|
||||
),
|
||||
'subdevice_role': StaticSelect2()
|
||||
}
|
||||
|
||||
|
||||
class DeviceTypeCSVForm(forms.ModelForm):
|
||||
@ -922,6 +946,7 @@ class InterfaceTemplateForm(BootstrapMixin, forms.ModelForm):
|
||||
]
|
||||
widgets = {
|
||||
'device_type': forms.HiddenInput(),
|
||||
'form_factor': StaticSelect2(),
|
||||
}
|
||||
|
||||
|
||||
@ -930,7 +955,8 @@ class InterfaceTemplateCreateForm(ComponentForm):
|
||||
label='Name'
|
||||
)
|
||||
form_factor = forms.ChoiceField(
|
||||
choices=IFACE_FF_CHOICES
|
||||
choices=IFACE_FF_CHOICES,
|
||||
widget=StaticSelect2()
|
||||
)
|
||||
mgmt_only = forms.BooleanField(
|
||||
required=False,
|
||||
@ -966,6 +992,7 @@ class FrontPortTemplateForm(BootstrapMixin, forms.ModelForm):
|
||||
]
|
||||
widgets = {
|
||||
'device_type': forms.HiddenInput(),
|
||||
'rear_port': StaticSelect2(),
|
||||
}
|
||||
|
||||
|
||||
@ -979,7 +1006,8 @@ class FrontPortTemplateCreateForm(ComponentForm):
|
||||
rear_port_set = forms.MultipleChoiceField(
|
||||
choices=[],
|
||||
label='Rear ports',
|
||||
help_text='Select one rear port assignment for each front port being created.'
|
||||
help_text='Select one rear port assignment for each front port being created.',
|
||||
widget=StaticSelect2(),
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@ -1034,6 +1062,7 @@ class RearPortTemplateForm(BootstrapMixin, forms.ModelForm):
|
||||
]
|
||||
widgets = {
|
||||
'device_type': forms.HiddenInput(),
|
||||
'type': StaticSelect2(),
|
||||
}
|
||||
|
||||
|
||||
@ -1042,7 +1071,8 @@ class RearPortTemplateCreateForm(ComponentForm):
|
||||
label='Name'
|
||||
)
|
||||
type = forms.ChoiceField(
|
||||
choices=PORT_TYPE_CHOICES
|
||||
choices=PORT_TYPE_CHOICES,
|
||||
widget=StaticSelect2(),
|
||||
)
|
||||
positions = forms.IntegerField(
|
||||
min_value=1,
|
||||
@ -1109,6 +1139,9 @@ class PlatformForm(BootstrapMixin, forms.ModelForm):
|
||||
'name', 'slug', 'manufacturer', 'napalm_driver', 'napalm_args',
|
||||
]
|
||||
widgets = {
|
||||
'manufacturer': APISelect(
|
||||
api_url="/api/dcim/manufacturers/"
|
||||
),
|
||||
'napalm_args': SmallTextarea(),
|
||||
}
|
||||
|
||||
@ -1140,9 +1173,10 @@ class PlatformCSVForm(forms.ModelForm):
|
||||
class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
||||
site = forms.ModelChoiceField(
|
||||
queryset=Site.objects.all(),
|
||||
widget=forms.Select(
|
||||
attrs={
|
||||
'filter-for': 'rack',
|
||||
widget=APISelect(
|
||||
api_url="/api/dcim/sites/",
|
||||
filter_for={
|
||||
'rack': 'site_id'
|
||||
}
|
||||
)
|
||||
)
|
||||
@ -1153,11 +1187,8 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
||||
),
|
||||
required=False,
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/racks/?site_id={{site}}',
|
||||
api_url='/api/dcim/racks/',
|
||||
display_field='display_name',
|
||||
attrs={
|
||||
'filter-for': 'position',
|
||||
}
|
||||
)
|
||||
)
|
||||
position = forms.TypedChoiceField(
|
||||
@ -1165,15 +1196,16 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
||||
empty_value=None,
|
||||
help_text="The lowest-numbered unit occupied by the device",
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/racks/{{rack}}/units/?face={{face}}',
|
||||
api_url='/api/dcim/racks/{{rack}}/units/',
|
||||
disabled_indicator='device'
|
||||
)
|
||||
)
|
||||
manufacturer = forms.ModelChoiceField(
|
||||
queryset=Manufacturer.objects.all(),
|
||||
widget=forms.Select(
|
||||
attrs={
|
||||
'filter-for': 'device_type',
|
||||
widget=APISelect(
|
||||
api_url="/api/dcim/manufacturers/",
|
||||
filter_for={
|
||||
'device_type': 'manufacturer_id'
|
||||
}
|
||||
)
|
||||
)
|
||||
@ -1184,15 +1216,21 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
||||
),
|
||||
label='Device type',
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/device-types/?manufacturer_id={{manufacturer}}',
|
||||
api_url='/api/dcim/device-types/',
|
||||
display_field='model'
|
||||
)
|
||||
)
|
||||
cluster_group = forms.ModelChoiceField(
|
||||
queryset=ClusterGroup.objects.all(),
|
||||
required=False,
|
||||
widget=forms.Select(
|
||||
attrs={'filter-for': 'cluster', 'nullable': 'true'}
|
||||
widget=APISelect(
|
||||
api_url="/api/virtualization/cluster-groups/",
|
||||
filter_for={
|
||||
'cluster': 'group_id'
|
||||
},
|
||||
attrs={
|
||||
'nullable': 'true'
|
||||
}
|
||||
)
|
||||
)
|
||||
cluster = ChainedModelChoiceField(
|
||||
@ -1202,7 +1240,7 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
||||
),
|
||||
required=False,
|
||||
widget=APISelect(
|
||||
api_url='/api/virtualization/clusters/?group_id={{cluster_group}}',
|
||||
api_url='/api/virtualization/clusters/',
|
||||
)
|
||||
)
|
||||
comments = CommentField()
|
||||
@ -1223,11 +1261,20 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
||||
"config context",
|
||||
}
|
||||
widgets = {
|
||||
'face': forms.Select(
|
||||
attrs={
|
||||
'filter-for': 'position',
|
||||
'face': StaticSelect2(
|
||||
filter_for={
|
||||
'position': 'face'
|
||||
}
|
||||
),
|
||||
'device_role': APISelect(
|
||||
api_url='/api/dcim/device-roles/'
|
||||
),
|
||||
'status': StaticSelect2(),
|
||||
'platform': APISelect(
|
||||
api_url="/api/dcim/platforms/"
|
||||
),
|
||||
'primary_ip4': StaticSelect2(),
|
||||
'primary_ip6': StaticSelect2(),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@ -1846,6 +1893,9 @@ class InterfaceForm(BootstrapMixin, forms.ModelForm):
|
||||
]
|
||||
widgets = {
|
||||
'device': forms.HiddenInput(),
|
||||
'form_factor': StaticSelect2(),
|
||||
'lag': StaticSelect2(),
|
||||
'mode': StaticSelect2(),
|
||||
}
|
||||
labels = {
|
||||
'mode': '802.1Q Mode',
|
||||
@ -1979,7 +2029,8 @@ class InterfaceCreateForm(ComponentForm, forms.Form):
|
||||
label='Name'
|
||||
)
|
||||
form_factor = forms.ChoiceField(
|
||||
choices=IFACE_FF_CHOICES
|
||||
choices=IFACE_FF_CHOICES,
|
||||
widget=StaticSelect2(),
|
||||
)
|
||||
enabled = forms.BooleanField(
|
||||
required=False
|
||||
@ -1987,7 +2038,8 @@ class InterfaceCreateForm(ComponentForm, forms.Form):
|
||||
lag = forms.ModelChoiceField(
|
||||
queryset=Interface.objects.all(),
|
||||
required=False,
|
||||
label='Parent LAG'
|
||||
label='Parent LAG',
|
||||
widget=StaticSelect2(),
|
||||
)
|
||||
mtu = forms.IntegerField(
|
||||
required=False,
|
||||
@ -2010,7 +2062,8 @@ class InterfaceCreateForm(ComponentForm, forms.Form):
|
||||
)
|
||||
mode = forms.ChoiceField(
|
||||
choices=add_blank_choice(IFACE_MODE_CHOICES),
|
||||
required=False
|
||||
required=False,
|
||||
widget=StaticSelect2(),
|
||||
)
|
||||
tags = TagField(
|
||||
required=False
|
||||
@ -2120,6 +2173,8 @@ class FrontPortForm(BootstrapMixin, forms.ModelForm):
|
||||
]
|
||||
widgets = {
|
||||
'device': forms.HiddenInput(),
|
||||
'type': StaticSelect2(),
|
||||
'rear_port': StaticSelect2(),
|
||||
}
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@ -2138,7 +2193,8 @@ class FrontPortCreateForm(ComponentForm):
|
||||
label='Name'
|
||||
)
|
||||
type = forms.ChoiceField(
|
||||
choices=PORT_TYPE_CHOICES
|
||||
choices=PORT_TYPE_CHOICES,
|
||||
widget=StaticSelect2(),
|
||||
)
|
||||
rear_port_set = forms.MultipleChoiceField(
|
||||
choices=[],
|
||||
@ -2221,6 +2277,7 @@ class RearPortForm(BootstrapMixin, forms.ModelForm):
|
||||
]
|
||||
widgets = {
|
||||
'device': forms.HiddenInput(),
|
||||
'type': StaticSelect2(),
|
||||
}
|
||||
|
||||
|
||||
@ -2229,7 +2286,8 @@ class RearPortCreateForm(ComponentForm):
|
||||
label='Name'
|
||||
)
|
||||
type = forms.ChoiceField(
|
||||
choices=PORT_TYPE_CHOICES
|
||||
choices=PORT_TYPE_CHOICES,
|
||||
widget=StaticSelect2(),
|
||||
)
|
||||
positions = forms.IntegerField(
|
||||
min_value=1,
|
||||
@ -2582,7 +2640,8 @@ class PopulateDeviceBayForm(BootstrapMixin, forms.Form):
|
||||
installed_device = forms.ModelChoiceField(
|
||||
queryset=Device.objects.all(),
|
||||
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(),
|
||||
)
|
||||
|
||||
def __init__(self, device_bay, *args, **kwargs):
|
||||
@ -2659,6 +2718,11 @@ class InventoryItemForm(BootstrapMixin, forms.ModelForm):
|
||||
fields = [
|
||||
'name', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'description', 'tags',
|
||||
]
|
||||
widgets = {
|
||||
'manufacturer': APISelect(
|
||||
api_url="/api/dcim/manufacturers/"
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
class InventoryItemCSVForm(forms.ModelForm):
|
||||
@ -2820,9 +2884,11 @@ class VCMemberSelectForm(BootstrapMixin, ChainedFieldsMixin, forms.Form):
|
||||
queryset=Site.objects.all(),
|
||||
label='Site',
|
||||
required=False,
|
||||
widget=forms.Select(
|
||||
attrs={
|
||||
'filter-for': 'rack',
|
||||
widget=APISelect(
|
||||
api_url="/api/dcim/sites/",
|
||||
filter_for={
|
||||
'rack': 'site_id',
|
||||
'device': 'site_id',
|
||||
}
|
||||
)
|
||||
)
|
||||
@ -2834,9 +2900,11 @@ class VCMemberSelectForm(BootstrapMixin, ChainedFieldsMixin, forms.Form):
|
||||
label='Rack',
|
||||
required=False,
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/racks/?site_id={{site}}',
|
||||
api_url='/api/dcim/racks/',
|
||||
filter_for={
|
||||
'device': 'rack_id'
|
||||
},
|
||||
attrs={
|
||||
'filter-for': 'device',
|
||||
'nullable': 'true',
|
||||
}
|
||||
)
|
||||
@ -2851,7 +2919,7 @@ class VCMemberSelectForm(BootstrapMixin, ChainedFieldsMixin, forms.Form):
|
||||
),
|
||||
label='Device',
|
||||
widget=APISelect(
|
||||
api_url='/api/dcim/devices/?site_id={{site}}&rack_id={{rack}}',
|
||||
api_url='/api/dcim/devices/',
|
||||
display_field='display_name',
|
||||
disabled_indicator='virtual_chassis'
|
||||
)
|
||||
|
Reference in New Issue
Block a user