import copy from django.contrib import admin from django.forms import Textarea from django.db import models from programs.models import * # # Inlines # # TODO: inherits from the corresponding admin view class SoundFileInline (admin.TabularInline): model = SoundFile raw_id_fields=('parent',) fields = ('title', 'private', 'tags', 'file', 'duration', 'fragment') extra = 1 class ScheduleInline (admin.TabularInline): model = Schedule extra = 1 class DiffusionInline (admin.TabularInline): model = Diffusion raw_id_fields=('parent',) fields = ('parent', 'type', 'date') extra = 1 # # Parents # class MetadataAdmin (admin.ModelAdmin): fieldsets = [ ( None, { 'fields': [ 'title', 'tags' ] }), ( None, { 'fields': [ 'date' ], }), ] def save_model (self, request, obj, form, change): if not obj.author: obj.author = request.user obj.save() class PublicationAdmin (MetadataAdmin): formfield_overrides = { models.TextField: {'widget': Textarea(attrs={'style':'width:calc(100% - 12px);'})}, } fieldsets = copy.deepcopy(MetadataAdmin.fieldsets) list_display = ('id', 'title', 'date', 'private') list_filter = ['date', 'private'] search_fields = ['title', 'content'] fieldsets[0][1]['fields'].insert(1, 'subtitle') fieldsets[0][1]['fields'] += [ 'img', 'content' ] fieldsets[1][1]['fields'] += [ 'parent', 'private', 'can_comment' ] #, 'meta' ], # # ModelAdmin list # class SoundFileAdmin (MetadataAdmin): fieldsets = [ (None, { 'fields': ['title', 'tags', 'file', 'embed' ] } ), ('metadata', { 'fields': ['duration', 'date', 'podcastable', 'fragment' ] } ) ] class ArticleAdmin (PublicationAdmin): fieldsets = copy.deepcopy(PublicationAdmin.fieldsets) fieldsets[1][1]['fields'] += ['static_page'] class ProgramAdmin (PublicationAdmin): fieldsets = copy.deepcopy(PublicationAdmin.fieldsets) inlines = [ ScheduleInline ] fieldsets[1][1]['fields'] += ['email', 'url'] class EpisodeAdmin (PublicationAdmin): fieldsets = copy.deepcopy(PublicationAdmin.fieldsets) inlines = [ SoundFileInline ] list_filter = ['parent'] + PublicationAdmin.list_filter # FIXME later: when we have thousands of tracks fieldsets[0][1]['fields'] += ['tracks'] admin.site.register(Track) admin.site.register(SoundFile, SoundFileAdmin) admin.site.register(Schedule) admin.site.register(Article, ArticleAdmin) admin.site.register(Program, ProgramAdmin) admin.site.register(Episode, EpisodeAdmin) admin.site.register(Diffusion)