aircox/aircox_web/admin.py

100 lines
2.7 KiB
Python

import copy
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from content_editor.admin import ContentEditor, ContentEditorInline
from feincms3 import plugins
from feincms3.admin import TreeAdmin
from aircox import models as aircox
from . import models
from aircox.admin.playlist import TracksInline
from aircox.admin.mixins import UnrelatedInlineMixin
@admin.register(models.Site)
class SiteAdmin(ContentEditor):
list_display = ['title', 'station']
inlines = [
ContentEditorInline.create(models.SiteRichText),
ContentEditorInline.create(models.SiteImage),
ContentEditorInline.create(models.SiteLink),
]
class PageDiffusionPlaylist(UnrelatedInlineMixin, TracksInline):
parent_model = aircox.Diffusion
fields = list(TracksInline.fields)
fields.remove('timestamp')
def get_parent(self, view_obj):
return view_obj and view_obj.diffusion
def save_parent(self, parent, view_obj):
parent.save()
view_obj.diffusion = parent
view_obj.save()
@admin.register(models.Page)
class PageAdmin(admin.ModelAdmin):
list_display = ["title", "parent", "status"]
list_editable = ['status']
prepopulated_fields = {"slug": ("title",)}
fieldsets = (
(_('Main'), {
'fields': ['title', 'slug']
}),
(_('Settings'), {
'fields': ['status', 'static_path', 'path'],
}),
)
@admin.register(models.Article)
class ArticleAdmin(ContentEditor, PageAdmin):
fieldsets = (
(_('Main'), {
'fields': ['title', 'slug', 'as_program', 'cover', 'headline'],
'classes': ('tabbed', 'uncollapse')
}),
(_('Settings'), {
'fields': ['featured', 'allow_comments',
'status', 'static_path', 'path'],
'classes': ('tabbed',)
}),
#(_('Infos'), {
# 'fields': ['diffusion'],
# 'classes': ('tabbed',)
#}),
)
inlines = [
ContentEditorInline.create(models.ArticleRichText),
ContentEditorInline.create(models.ArticleImage),
]
@admin.register(models.DiffusionPage)
class DiffusionPageAdmin(ArticleAdmin):
fieldsets = copy.deepcopy(ArticleAdmin.fieldsets)
fieldsets[1][1]['fields'].insert(0, 'diffusion')
# TODO: permissions
def get_inline_instances(self, request, obj=None):
inlines = super().get_inline_instances(request, obj)
if obj and obj.diffusion:
inlines.insert(0, PageDiffusionPlaylist(self.model, self.admin_site))
return inlines
@admin.register(models.ProgramPage)
class ProgramPageAdmin(ArticleAdmin):
fieldsets = copy.deepcopy(ArticleAdmin.fieldsets)
fieldsets[1][1]['fields'].insert(0, 'program')