Enforce that a drone may appear in at most one drone set. Also hide drones that
are already used from the drone set filter_horizontal widget.

Signed-off-by: James Ren <jamesren@google.com>



git-svn-id: http://test.kernel.org/svn/autotest/trunk@4580 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/afe/admin.py b/frontend/afe/admin.py
index 0b92670..b6ba64a 100644
--- a/frontend/afe/admin.py
+++ b/frontend/afe/admin.py
@@ -136,8 +136,21 @@
 admin.site.register(models.AclGroup, AclGroupAdmin)
 
 
+class DroneSetForm(forms.ModelForm):
+    def __init__(self, *args, **kwargs):
+        super(DroneSetForm, self).__init__(*args, **kwargs)
+        drone_ids_used = set()
+        for drone_set in models.DroneSet.objects.exclude(id=self.instance.id):
+            drone_ids_used.update(drone_set.drones.values_list('id', flat=True))
+        available_drones = models.Drone.objects.exclude(id__in=drone_ids_used)
+
+        self.fields['drones'].widget.choices = [(drone.id, drone.hostname)
+                                                for drone in available_drones]
+
+
 class DroneSetAdmin(SiteAdmin):
     filter_horizontal = ('drones',)
+    form = DroneSetForm
 
 admin.site.register(models.DroneSet, DroneSetAdmin)