forked from rc/aircox
124 lines
2.9 KiB
Python
Executable File
124 lines
2.9 KiB
Python
Executable File
import copy
|
|
|
|
from django.contrib import admin
|
|
from django.forms import Textarea
|
|
from django.db import models
|
|
|
|
import autocomplete_light as al
|
|
|
|
from programs.models import *
|
|
|
|
|
|
#
|
|
# Inlines
|
|
#
|
|
# TODO: inherits from the corresponding admin view
|
|
class SoundInline (admin.TabularInline):
|
|
model = Sound
|
|
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):
|
|
form = al.modelform_factory(
|
|
Episode
|
|
, fields = '__all__'
|
|
# , autocomplete_fields = ['tracks']
|
|
)
|
|
|
|
|
|
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 SoundAdmin (MetadataAdmin):
|
|
fieldsets = [
|
|
(None, { 'fields': ['title', 'tags', 'path' ] } ),
|
|
(None, { 'fields': ['duration', 'date', '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 = [ SoundInline ]
|
|
list_filter = ['parent'] + PublicationAdmin.list_filter
|
|
|
|
# FIXME later: when we have thousands of tracks
|
|
fieldsets[0][1]['fields'] += ['tracks']
|
|
fieldsets[0][1]['fields'] += ['sounds']
|
|
|
|
|
|
|
|
admin.site.register(Track)
|
|
admin.site.register(Sound, SoundAdmin)
|
|
admin.site.register(Schedule)
|
|
admin.site.register(Article, ArticleAdmin)
|
|
admin.site.register(Program, ProgramAdmin)
|
|
admin.site.register(Episode, EpisodeAdmin)
|
|
admin.site.register(Diffusion)
|
|
|