Show published-ness in admin list
[podjango:podjango-sof.git] / podjango / apps / cast / admin.py
1 #  Copyright (C) 2008       Bradley M. Kuhn <bkuhn@ebb.org>
2 #  Copyright (C) 2006, 2007 Software Freedom Law Center, Inc.
3 #  Copyright (C) 2012       Will Thompson <will@willthompson.co.uk>
4 #
5 # This software's license gives you freedom; you can copy, convey,
6 # propogate, redistribute and/or modify this program under the terms of
7 # the GNU Affero General Public License (AGPL) as published by the Free
8 # Software Foundation (FSF), either version 3 of the License, or (at your
9 # option) any later version of the AGPL published by the FSF.
10 #
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero
14 # General Public License for more details.
15 #
16 # You should have received a copy of the GNU Affero General Public License
17 # along with this program in a file in the toplevel directory called
18 # "AGPLv3".  If not, see <http://www.gnu.org/licenses/>.
19 #
20 from datetime import datetime
21 from django.contrib import admin
22 from models import Cast, CastImage, Season
23 import os.path
24
25 #class CastTagAdmin(admin.ModelAdmin):
26 #    prepopulated_fields = {'slug': ('label',)}
27 #
28 #admin.site.register(CastTag, CastTagAdmin)
29
30 class CastImageAdminInline(admin.StackedInline):
31     model = CastImage
32     extra = 1
33
34 class TenseFilter(admin.SimpleListFilter):
35     title = 'tense'
36     parameter_name = 'tense'
37
38     def lookups(self, request, model_admin):
39         return (
40             ('future', 'in the future'),
41             ('past',   'in the past'),
42         )
43
44     def queryset(self, request, queryset):
45         if self.value() == 'future':
46             return queryset.filter(pub_date__gte=datetime.now())
47
48         if self.value() == 'past':
49             return queryset.filter(pub_date__lte=datetime.now())
50
51 class CastAdmin(admin.ModelAdmin):
52     list_display = ('pub_date', 'published', 'title', 'mp3_summary')
53     list_filter = [TenseFilter, 'season', 'published']
54     readonly_fields = ('duration',)
55     date_hierarchy = 'pub_date'
56     search_fields = ['title', 'summary', 'body']
57     prepopulated_fields = {'slug': ("title",)}
58 #    filter_horizontal = ('tags',)
59     inlines = [
60         CastImageAdminInline,
61     ]
62
63     # TODO: maybe the mp3 should be a related object
64     def mp3_summary(self, obj):
65         if not obj.mp3:
66             return "no path"
67         if not obj.duration:
68             return "missing duration"
69
70         return "%s (%d bytes, %s)" % (
71             obj.mp3.name,
72             obj.mp3.size,
73             obj.duration)
74     mp3_summary.short_description = 'MP3'
75
76 admin.site.register(Cast, CastAdmin)
77 admin.site.register(Season)