diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 4954099dd..8b0c9cce2 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -425,6 +425,11 @@ class DeviceForm(forms.ModelForm, BootstrapMixin): else: self.fields['device_type'].choices = [] + # Disable rack assignment if this is a child device installed in a parent device + if self.instance.device_type.is_child_device and hasattr(self.instance, 'parent_bay'): + self.fields['site'].disabled = True + self.fields['rack'].disabled = True + class BaseDeviceFromCSVForm(forms.ModelForm): device_role = forms.ModelChoiceField(queryset=DeviceRole.objects.all(), to_field_name='name', diff --git a/netbox/templates/dcim/device_edit.html b/netbox/templates/dcim/device_edit.html index 2694bad7a..b0142dcb0 100644 --- a/netbox/templates/dcim/device_edit.html +++ b/netbox/templates/dcim/device_edit.html @@ -22,8 +22,32 @@
{% render_field form.site %} {% render_field form.rack %} - {% render_field form.face %} - {% render_field form.position %} + {% if obj.device_type.is_child_device and obj.parent_bay %} +
+ + +
+
+ +
+

+ {{ obj.parent_bay.name }} + {% if perms.dcim.change_devicebay %} + + Remove + + {% endif %} +

+
+
+ {% elif not obj.device_type.is_child_device %} + {% render_field form.face %} + {% render_field form.position %} + {% endif %}