work on admin interface

This commit is contained in:
bkfox
2016-06-07 17:25:38 +02:00
parent 21f3e89101
commit 83e425349b
6 changed files with 118 additions and 44 deletions

View File

@ -4,7 +4,6 @@ from django.utils.translation import ugettext as _, ugettext_lazy
import aircox.cms.models as models
class PostAdmin(admin.ModelAdmin):
list_display = [ 'title', 'date', 'author', 'published', 'post_tags']
list_editable = [ 'published' ]
@ -42,6 +41,56 @@ class CommentAdmin(admin.ModelAdmin):
return post.content[:256]
content_slice.short_description = _('content')
class PostInline(admin.StackedInline):
extra = 1
max_num = 1
verbose_name = _('Post')
fieldsets = [
(None, {
'fields': ['title', 'content', 'image', 'tags']
}),
(None, {
'fields': ['date', 'published', 'author']
})
]
def inject_related_inline(post_model, prepend = False, inline = None):
"""
Create an inline class and inject it into the related model admin class.
Clean-up bound attributes.
"""
class InlineModel(PostInline):
model = post_model
verbose_name = _('Related post')
inline = inline or InlineModel
# remove bound attributes
for none, dic in inline.fieldsets:
if not dic.get('fields'):
continue
dic['fields'] = [ v for v in dic['fields']
if v not in post_model._relation.bindings.keys() ]
inject_inline(post_model._meta.get_field('related').rel.to,
inline, prepend)
def inject_inline(model, inline, prepend = False):
registry = admin.site._registry
if not model in registry:
return TypeError('{} not in admin registry'.format(model.__name__))
inlines = list(registry[model].inlines) or []
if prepend:
inlines.insert(0, inline)
else:
inlines.append(inline)
registry[model].inlines = inlines
admin.site.register(models.Article, PostAdmin)
admin.site.register(models.Comment, CommentAdmin)