christchurch_django / sermons / admin.py

from functools import partial

from django.contrib import admin
from django.forms.models import modelform_factory

from sermons.models import Speaker, Topic, Series, Sermon


class SpeakerAdmin(admin.ModelAdmin):
    list_display = ['name']


class TopicAdmin(admin.ModelAdmin):
    list_display = ['name']


class SeriesAdmin(admin.ModelAdmin):
    list_display = ['name']


class SermonAdmin(admin.ModelAdmin):
    list_display = ['date_delivered', 'time_delivered', 'speaker', 'title', 'bible_book', 'passage', 'series', 'published']
    list_filter = ['published', 'speaker', 'series']
    date_hierarchy = 'date_delivered'
    list_per_page = 200

    def get_form(self, request, obj=None, **kwargs):
        if obj is None:
            # For add view, we have a simplified form that just has an upload field.
            return modelform_factory(self.model,
                                     fields=["sermon"],
                                     formfield_callback=partial(self.formfield_for_dbfield, request=request),)
        else:
            return super(SermonAdmin, self).get_form(request, obj=obj, **kwargs)

    def save_model(self, request, obj, form, change):
        if obj.pk is None:
            from sermons.tags import set_attrs_from_filename
            set_attrs_from_filename(obj)
            obj.save()
        else:
            from sermons.tags import write_id3_tags
            obj.save()
            write_id3_tags(obj)


admin.site.register(Speaker, SpeakerAdmin)
admin.site.register(Topic, TopicAdmin)
admin.site.register(Series, SeriesAdmin)
admin.site.register(Sermon, SermonAdmin)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.