Browse Source

Fixes #563: Allow a device to be flipped from one rack face to the other

Jeremy Stretch 8 years ago
parent
commit
ae8f40ed8d
2 changed files with 9 additions and 1 deletions
  1. 5 1
      netbox/dcim/api/views.py
  2. 4 0
      netbox/dcim/forms.py

+ 5 - 1
netbox/dcim/api/views.py

@@ -118,7 +118,11 @@ class RackUnitListView(APIView):
 
         rack = get_object_or_404(Rack, pk=pk)
         face = request.GET.get('face', 0)
-        elevation = rack.get_rack_units(face)
+        try:
+            exclude = int(request.GET.get('exclude', None))
+        except ValueError:
+            exclude = None
+        elevation = rack.get_rack_units(face, exclude)
 
         # Serialize Devices within the rack elevation
         for u in elevation:

+ 4 - 0
netbox/dcim/forms.py

@@ -419,6 +419,10 @@ class DeviceForm(BootstrapMixin, CustomFieldForm):
                 ip_choices += [(ip.id, u'{} ({} NAT)'.format(ip.address, ip.nat_inside.interface)) for ip in nat_ips]
                 self.fields['primary_ip{}'.format(family)].choices = [(None, '---------')] + ip_choices
 
+            # If editing an existing device, exclude it from the list of occupied rack units. This ensures that a device
+            # can be flipped from one face to another.
+            self.fields['position'].widget.attrs['api-url'] += '&exclude={}'.format(self.instance.pk)
+
         else:
 
             # An object that doesn't exist yet can't have any IPs assigned to it