|
@@ -190,7 +190,9 @@ class RackRoleForm(BootstrapMixin, forms.ModelForm):
|
|
|
class RackForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
|
|
group = ChainedModelChoiceField(
|
|
|
queryset=RackGroup.objects.all(),
|
|
|
- chains={'site': 'site'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ),
|
|
|
required=False,
|
|
|
widget=APISelect(
|
|
|
api_url='/api/dcim/rack-groups/?site_id={{site}}',
|
|
@@ -545,7 +547,9 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
|
|
)
|
|
|
rack = ChainedModelChoiceField(
|
|
|
queryset=Rack.objects.all(),
|
|
|
- chains={'site': 'site'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ),
|
|
|
required=False,
|
|
|
widget=APISelect(
|
|
|
api_url='/api/dcim/racks/?site_id={{site}}',
|
|
@@ -570,7 +574,9 @@ class DeviceForm(BootstrapMixin, TenancyForm, CustomFieldForm):
|
|
|
)
|
|
|
device_type = ChainedModelChoiceField(
|
|
|
queryset=DeviceType.objects.all(),
|
|
|
- chains={'manufacturer': 'manufacturer'},
|
|
|
+ chains=(
|
|
|
+ ('manufacturer', 'manufacturer'),
|
|
|
+ ),
|
|
|
label='Device type',
|
|
|
widget=APISelect(
|
|
|
api_url='/api/dcim/device-types/?manufacturer_id={{manufacturer}}',
|
|
@@ -957,20 +963,29 @@ class ConsoleConnectionImportForm(BootstrapMixin, BulkImportForm):
|
|
|
class ConsolePortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
|
|
site = forms.ModelChoiceField(
|
|
|
queryset=Site.objects.all(),
|
|
|
- widget=forms.HiddenInput(),
|
|
|
+ required=False,
|
|
|
+ widget=forms.Select(
|
|
|
+ attrs={'filter-for': 'rack'}
|
|
|
+ )
|
|
|
)
|
|
|
rack = ChainedModelChoiceField(
|
|
|
queryset=Rack.objects.all(),
|
|
|
- chains={'site': 'site'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ),
|
|
|
label='Rack',
|
|
|
required=False,
|
|
|
- widget=forms.Select(
|
|
|
+ widget=APISelect(
|
|
|
+ api_url='/api/dcim/racks/?site_id={{site}}',
|
|
|
attrs={'filter-for': 'console_server', 'nullable': 'true'}
|
|
|
)
|
|
|
)
|
|
|
console_server = ChainedModelChoiceField(
|
|
|
queryset=Device.objects.filter(device_type__is_console_server=True),
|
|
|
- chains={'site': 'site', 'rack': 'rack'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ('rack', 'rack'),
|
|
|
+ ),
|
|
|
label='Console Server',
|
|
|
required=False,
|
|
|
widget=APISelect(
|
|
@@ -990,7 +1005,9 @@ class ConsolePortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelF
|
|
|
)
|
|
|
cs_port = ChainedModelChoiceField(
|
|
|
queryset=ConsoleServerPort.objects.all(),
|
|
|
- chains={'device': 'console_server'},
|
|
|
+ chains=(
|
|
|
+ ('device', 'console_server'),
|
|
|
+ ),
|
|
|
label='Port',
|
|
|
widget=APISelect(
|
|
|
api_url='/api/dcim/console-server-ports/?device_id={{console_server}}',
|
|
@@ -1035,20 +1052,29 @@ class ConsoleServerPortCreateForm(DeviceComponentForm):
|
|
|
class ConsoleServerPortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.Form):
|
|
|
site = forms.ModelChoiceField(
|
|
|
queryset=Site.objects.all(),
|
|
|
- widget=forms.HiddenInput(),
|
|
|
+ required=False,
|
|
|
+ widget=forms.Select(
|
|
|
+ attrs={'filter-for': 'rack'}
|
|
|
+ )
|
|
|
)
|
|
|
rack = ChainedModelChoiceField(
|
|
|
queryset=Rack.objects.all(),
|
|
|
- chains={'site': 'site'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ),
|
|
|
label='Rack',
|
|
|
required=False,
|
|
|
- widget=forms.Select(
|
|
|
+ widget=APISelect(
|
|
|
+ api_url='/api/dcim/racks/?site_id={{site}}',
|
|
|
attrs={'filter-for': 'device', 'nullable': 'true'}
|
|
|
)
|
|
|
)
|
|
|
device = ChainedModelChoiceField(
|
|
|
queryset=Device.objects.all(),
|
|
|
- chains={'site': 'site', 'rack': 'rack'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ('rack', 'rack'),
|
|
|
+ ),
|
|
|
label='Device',
|
|
|
required=False,
|
|
|
widget=APISelect(
|
|
@@ -1068,7 +1094,9 @@ class ConsoleServerPortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.
|
|
|
)
|
|
|
port = ChainedModelChoiceField(
|
|
|
queryset=ConsolePort.objects.all(),
|
|
|
- chains={'device': 'device'},
|
|
|
+ chains=(
|
|
|
+ ('device', 'device'),
|
|
|
+ ),
|
|
|
label='Port',
|
|
|
widget=APISelect(
|
|
|
api_url='/api/dcim/console-ports/?device_id={{device}}',
|
|
@@ -1182,19 +1210,31 @@ class PowerConnectionImportForm(BootstrapMixin, BulkImportForm):
|
|
|
|
|
|
|
|
|
class PowerPortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelForm):
|
|
|
- site = forms.ModelChoiceField(queryset=Site.objects.all(), widget=forms.HiddenInput())
|
|
|
+ site = forms.ModelChoiceField(
|
|
|
+ queryset=Site.objects.all(),
|
|
|
+ required=False,
|
|
|
+ widget=forms.Select(
|
|
|
+ attrs={'filter-for': 'rack'}
|
|
|
+ )
|
|
|
+ )
|
|
|
rack = ChainedModelChoiceField(
|
|
|
queryset=Rack.objects.all(),
|
|
|
- chains={'site': 'site'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ),
|
|
|
label='Rack',
|
|
|
required=False,
|
|
|
- widget=forms.Select(
|
|
|
+ widget=APISelect(
|
|
|
+ api_url='/api/dcim/racks/?site_id={{site}}',
|
|
|
attrs={'filter-for': 'pdu', 'nullable': 'true'}
|
|
|
)
|
|
|
)
|
|
|
pdu = ChainedModelChoiceField(
|
|
|
queryset=Device.objects.all(),
|
|
|
- chains={'site': 'site', 'rack': 'rack'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ('rack', 'rack'),
|
|
|
+ ),
|
|
|
label='PDU',
|
|
|
required=False,
|
|
|
widget=APISelect(
|
|
@@ -1214,7 +1254,9 @@ class PowerPortConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelFor
|
|
|
)
|
|
|
power_outlet = ChainedModelChoiceField(
|
|
|
queryset=PowerOutlet.objects.all(),
|
|
|
- chains={'device': 'pdu'},
|
|
|
+ chains=(
|
|
|
+ ('device', 'pdu'),
|
|
|
+ ),
|
|
|
label='Outlet',
|
|
|
widget=APISelect(
|
|
|
api_url='/api/dcim/power-outlets/?device_id={{pdu}}',
|
|
@@ -1259,20 +1301,29 @@ class PowerOutletCreateForm(DeviceComponentForm):
|
|
|
class PowerOutletConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.Form):
|
|
|
site = forms.ModelChoiceField(
|
|
|
queryset=Site.objects.all(),
|
|
|
- widget=forms.HiddenInput()
|
|
|
+ required=False,
|
|
|
+ widget=forms.Select(
|
|
|
+ attrs={'filter-for': 'rack'}
|
|
|
+ )
|
|
|
)
|
|
|
rack = ChainedModelChoiceField(
|
|
|
queryset=Rack.objects.all(),
|
|
|
- chains={'site': 'site'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ),
|
|
|
label='Rack',
|
|
|
required=False,
|
|
|
- widget=forms.Select(
|
|
|
+ widget=APISelect(
|
|
|
+ api_url='/api/dcim/racks/?site_id={{site}}',
|
|
|
attrs={'filter-for': 'device', 'nullable': 'true'}
|
|
|
)
|
|
|
)
|
|
|
device = ChainedModelChoiceField(
|
|
|
queryset=Device.objects.all(),
|
|
|
- chains={'site': 'site', 'rack': 'rack'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site'),
|
|
|
+ ('rack', 'rack'),
|
|
|
+ ),
|
|
|
label='Device',
|
|
|
required=False,
|
|
|
widget=APISelect(
|
|
@@ -1292,7 +1343,9 @@ class PowerOutletConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.Form):
|
|
|
)
|
|
|
port = ChainedModelChoiceField(
|
|
|
queryset=PowerPort.objects.all(),
|
|
|
- chains={'device': 'device'},
|
|
|
+ chains=(
|
|
|
+ ('device', 'device'),
|
|
|
+ ),
|
|
|
label='Port',
|
|
|
widget=APISelect(
|
|
|
api_url='/api/dcim/power-ports/?device_id={{device}}',
|
|
@@ -1412,7 +1465,9 @@ class InterfaceConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelFor
|
|
|
)
|
|
|
rack_b = ChainedModelChoiceField(
|
|
|
queryset=Rack.objects.all(),
|
|
|
- chains={'site': 'site_b'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site_b'),
|
|
|
+ ),
|
|
|
label='Rack',
|
|
|
required=False,
|
|
|
widget=APISelect(
|
|
@@ -1422,7 +1477,10 @@ class InterfaceConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelFor
|
|
|
)
|
|
|
device_b = ChainedModelChoiceField(
|
|
|
queryset=Device.objects.all(),
|
|
|
- chains={'site': 'site_b', 'rack': 'rack_b'},
|
|
|
+ chains=(
|
|
|
+ ('site', 'site_b'),
|
|
|
+ ('rack', 'rack_b'),
|
|
|
+ ),
|
|
|
label='Device',
|
|
|
required=False,
|
|
|
widget=APISelect(
|
|
@@ -1444,7 +1502,9 @@ class InterfaceConnectionForm(BootstrapMixin, ChainedFieldsMixin, forms.ModelFor
|
|
|
queryset=Interface.objects.exclude(form_factor__in=VIRTUAL_IFACE_TYPES).select_related(
|
|
|
'circuit_termination', 'connected_as_a', 'connected_as_b'
|
|
|
),
|
|
|
- chains={'device': 'device_b'},
|
|
|
+ chains=(
|
|
|
+ ('device', 'device_b'),
|
|
|
+ ),
|
|
|
label='Interface',
|
|
|
widget=APISelect(
|
|
|
api_url='/api/dcim/interfaces/?device_id={{device_b}}&type=physical',
|