diff gpp/contests/admin.py @ 540:51fa1e0ca218

For #243, create a contests application.
author Brian Neal <bgneal@gmail.com>
date Mon, 09 Jan 2012 01:13:08 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/contests/admin.py	Mon Jan 09 01:13:08 2012 +0000
@@ -0,0 +1,50 @@
+"""
+Admin definitions for the contest application.
+
+"""
+from django.contrib import admin
+from django.conf import settings
+
+from contests.models import Contest
+
+
+class ContestAdmin(admin.ModelAdmin):
+    list_display = ['title', 'is_public', 'creation_date', 'end_date',
+            'contestant_count', 'winner']
+    list_editable = ['is_public']
+    date_hierarchy = 'creation_date'
+    search_fields = ['title', 'description']
+    prepopulated_fields = {'slug': ['title']}
+    raw_id_fields = ['winner', 'contestants']
+    actions = ['pick_winner']
+
+    class Media:
+        js = (['js/contests/contests_admin.js'] +
+                settings.GPP_THIRD_PARTY_JS['tiny_mce'])
+
+    def contestant_count(self, obj):
+        return obj.contestants.count()
+    contestant_count.short_description = '# Entries'
+
+    def pick_winner(self, request, qs):
+        """
+        Picks a winner on the contests selected by the admin. Note that for
+        safety reasons, we only update those contests that don't have winners
+        already.
+
+        """
+        count = 0
+        for contest in qs:
+            if not contest.winner:
+                contest.pick_winner()
+                contest.save()
+                count += 1
+
+        self.message_user(request, "%d of %d winners picked" % (count,
+            qs.count()))
+
+    pick_winner.short_description = "Pick winners for selected contests"
+
+
+
+admin.site.register(Contest, ContestAdmin)