annotate contests/admin.py @ 1201:fe10aea76cbd tip

Add 2023 MP3 compilation links
author Brian Neal <bgneal@gmail.com>
date Sun, 24 Mar 2024 14:50:23 -0500
parents 5977b43499f7
children
rev   line source
bgneal@540 1 """
bgneal@540 2 Admin definitions for the contest application.
bgneal@540 3
bgneal@540 4 """
bgneal@540 5 from django.contrib import admin
bgneal@540 6 from django.conf import settings
bgneal@540 7
bgneal@540 8 from contests.models import Contest
bgneal@540 9
bgneal@540 10
bgneal@540 11 class ContestAdmin(admin.ModelAdmin):
bgneal@540 12 list_display = ['title', 'is_public', 'creation_date', 'end_date',
bgneal@796 13 'contestant_count', 'winner_count']
bgneal@540 14 list_editable = ['is_public']
bgneal@540 15 date_hierarchy = 'creation_date'
bgneal@540 16 search_fields = ['title', 'description']
bgneal@540 17 prepopulated_fields = {'slug': ['title']}
bgneal@796 18 raw_id_fields = ['contestants', 'winners']
bgneal@796 19 actions = ['pick_winners']
bgneal@540 20
bgneal@540 21 class Media:
bgneal@540 22 js = (['js/contests/contests_admin.js'] +
bgneal@540 23 settings.GPP_THIRD_PARTY_JS['tiny_mce'])
bgneal@540 24
bgneal@540 25 def contestant_count(self, obj):
bgneal@540 26 return obj.contestants.count()
bgneal@540 27 contestant_count.short_description = '# Entries'
bgneal@540 28
bgneal@796 29 def winner_count(self, obj):
bgneal@796 30 return obj.winners.count()
bgneal@796 31 winner_count.short_description = '# Winners'
bgneal@796 32
bgneal@796 33 def pick_winners(self, request, qs):
bgneal@540 34 """
bgneal@540 35 Picks a winner on the contests selected by the admin. Note that for
bgneal@540 36 safety reasons, we only update those contests that don't have winners
bgneal@540 37 already.
bgneal@540 38
bgneal@540 39 """
bgneal@540 40 count = 0
bgneal@540 41 for contest in qs:
bgneal@796 42 if not contest.win_date:
bgneal@796 43 contest.pick_winners()
bgneal@540 44 contest.save()
bgneal@540 45 count += 1
bgneal@540 46
bgneal@540 47 self.message_user(request, "%d of %d winners picked" % (count,
bgneal@540 48 qs.count()))
bgneal@540 49
bgneal@796 50 pick_winners.short_description = "Pick winners for selected contests"
bgneal@540 51
bgneal@540 52
bgneal@540 53
bgneal@540 54 admin.site.register(Contest, ContestAdmin)