Browse Source

Fixes #327: Disable rack assignment for installed child devices

Jeremy Stretch 8 years ago
parent
commit
c643e3a74f
2 changed files with 31 additions and 2 deletions
  1. 5 0
      netbox/dcim/forms.py
  2. 26 2
      netbox/templates/dcim/device_edit.html

+ 5 - 0
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',

+ 26 - 2
netbox/templates/dcim/device_edit.html

@@ -22,8 +22,32 @@
         <div class="panel-body">
             {% 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 %}
+                <div class="form-group">
+                    <label class="col-md-3 control-label">Parent device</label>
+                    <div class="col-md-9">
+                        <p class="form-control-static">
+                            <a href="{% url 'dcim:device' pk=obj.parent_bay.device.pk %}">{{ obj.parent_bay.device }}</a>
+                        </p>
+                    </div>
+                </div>
+                <div class="form-group">
+                    <label class="col-md-3 control-label">Parent bay</label>
+                    <div class="col-md-9">
+                        <p class="form-control-static">
+                            {{ obj.parent_bay.name }}
+                            {% if perms.dcim.change_devicebay %}
+                                <a href="{% url 'dcim:devicebay_depopulate' pk=obj.parent_bay.pk %}" class="btn btn-danger btn-xs">
+                                    <i class="glyphicon glyphicon-remove" aria-hidden="true" title="Remove device"></i> Remove
+                                </a>
+                            {% endif %}
+                        </p>
+                    </div>
+                </div>
+            {% elif not obj.device_type.is_child_device %}
+                {% render_field form.face %}
+                {% render_field form.position %}
+            {% endif %}
         </div>
     </div>
     <div class="panel panel-default">