Remove invalidated records from the select lists in the admin interface.
Ex: Hosts edit page no longer shows invalidated labels in the "Labels"
selection boxes.
Risk: low
Visibility: medium (bug fix)
Signed-off-by: James Ren <jamesren@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@3577 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/afe/admin.py b/frontend/afe/admin.py
index 0f89f5b..2123f38 100644
--- a/frontend/afe/admin.py
+++ b/frontend/afe/admin.py
@@ -1,12 +1,24 @@
"""Django 1.0 admin interface declarations."""
from django.contrib import admin
+from django.db import models as dbmodels
from autotest_lib.frontend import settings
from autotest_lib.frontend.afe import model_logic, models
-class AtomicGroupAdmin(admin.ModelAdmin):
+class SiteAdmin(admin.ModelAdmin):
+ def formfield_for_dbfield(self, db_field, **kwargs):
+ field = super(SiteAdmin, self).formfield_for_dbfield(db_field, **kwargs)
+ if (db_field.rel and
+ issubclass(db_field.rel.to, model_logic.ModelWithInvalid)):
+ model = db_field.rel.to
+ field.choices = model.valid_objects.all().values_list(
+ 'id', model.name_field)
+ return field
+
+
+class AtomicGroupAdmin(SiteAdmin):
list_display = ('name', 'description', 'max_number_of_machines')
def queryset(self, request):
@@ -15,7 +27,7 @@
admin.site.register(models.AtomicGroup, AtomicGroupAdmin)
-class LabelAdmin(admin.ModelAdmin):
+class LabelAdmin(SiteAdmin):
list_display = ('name', 'kernel_config')
def queryset(self, request):
@@ -24,14 +36,14 @@
admin.site.register(models.Label, LabelAdmin)
-class UserAdmin(admin.ModelAdmin):
+class UserAdmin(SiteAdmin):
list_display = ('login', 'access_level')
search_fields = ('login',)
admin.site.register(models.User, UserAdmin)
-class HostAdmin(admin.ModelAdmin):
+class HostAdmin(SiteAdmin):
# TODO(showard) - showing platform requires a SQL query for
# each row (since labels are many-to-many) - should we remove
# it?
@@ -46,7 +58,7 @@
admin.site.register(models.Host, HostAdmin)
-class TestAdmin(admin.ModelAdmin):
+class TestAdmin(SiteAdmin):
fields = ('name', 'author', 'test_category', 'test_class',
'test_time', 'sync_count', 'test_type', 'path',
'dependencies', 'experimental', 'run_verify',
@@ -58,14 +70,14 @@
admin.site.register(models.Test, TestAdmin)
-class ProfilerAdmin(admin.ModelAdmin):
+class ProfilerAdmin(SiteAdmin):
list_display = ('name', 'description')
search_fields = ('name',)
admin.site.register(models.Profiler, ProfilerAdmin)
-class AclGroupAdmin(admin.ModelAdmin):
+class AclGroupAdmin(SiteAdmin):
list_display = ('name', 'description')
search_fields = ('name',)
filter_horizontal = ('users', 'hosts')
@@ -74,18 +86,18 @@
if settings.FULL_ADMIN:
- class JobAdmin(admin.ModelAdmin):
+ class JobAdmin(SiteAdmin):
list_display = ('id', 'owner', 'name', 'control_type')
filter_horizontal = ('dependency_labels',)
admin.site.register(models.Job, JobAdmin)
- class IneligibleHostQueueAdmin(admin.ModelAdmin):
+ class IneligibleHostQueueAdmin(SiteAdmin):
list_display = ('id', 'job', 'host')
admin.site.register(models.IneligibleHostQueue, IneligibleHostQueueAdmin)
- class HostQueueEntryAdmin(admin.ModelAdmin):
+ class HostQueueEntryAdmin(SiteAdmin):
list_display = ('id', 'job', 'host', 'status',
'meta_host')