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)