aldryn_faq/admin.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from distutils.version import LooseVersion
from django.contrib import admin
from django.templatetags.static import static
from django.utils.translation import ugettext as _
from django.utils.html import escape
import cms
from cms.admin.placeholderadmin import PlaceholderAdminMixin, FrontendEditableAdminMixin
from adminsortable2.admin import SortableAdminMixin
from aldryn_apphooks_config.admin import BaseAppHookConfig
from aldryn_translation_tools.admin import AllTranslationsMixin
from parler.admin import TranslatableAdmin
from .models import Category, Question, FaqConfig
from .forms import CategoryAdminForm
class CategoryAdmin(AllTranslationsMixin,
PlaceholderAdminMixin,
TranslatableAdmin):
list_display = ('__str__', 'appconfig', )
form = CategoryAdminForm
_fieldsets = [
(None, {
'fields': ('name', 'slug', )
}),
(_('Language Independent Fields'), {
'fields': ('appconfig', )
}),
(_('Advanced options'), {
'classes': ('collapse',),
'fields': ('description',)
}),
]
class Media:
# Workaround for known Django bug: #24467
# https://code.djangoproject.com/ticket/24467
# Django checks for self.prepopulated_fields to determine if it should
# include populate.js. But it never checks get_prepopulated_fields().
# Fix is slated for Django 1.9 release, so this needs to remain until
# we no longer support Django 1.8 or lower.
js = [static('admin/js/%s' % url) for url in (
'urlify.js', 'prepopulate.min.js')]
def get_prepopulated_fields(self, request, obj=None):
return {'slug': ['name']}
def get_fieldsets(self, request, obj=None):
return self._fieldsets
class QuestionAdmin(AllTranslationsMixin,
PlaceholderAdminMixin,
FrontendEditableAdminMixin,
SortableAdminMixin,
TranslatableAdmin):
render_placeholder_language_tabs = False
list_display = [
'__str__', 'category', 'tag_list', 'is_top', 'number_of_visits']
list_filter = ['category', 'translations__language_code']
frontend_editable_fields = ('title', 'category', 'answer_text')
readonly_fields = ['number_of_visits']
def tag_list(self, obj):
"""
Displays Taggit tags to a comma-separated list of the tags’ names.
"""
escaped_tags = [escape(tag.name) for tag in obj.tags.get_queryset()]
return ", ".join(escaped_tags)
tag_list.short_description = 'Tags'
tag_list.allow_tags = True
def get_fieldsets(self, request, obj=None):
fieldsets = [
(None, {
'fields': [
'title', 'slug', 'category', 'answer_text', 'tags',
'is_top', 'number_of_visits']
})
]
cms_compat_fieldset = {
'classes': ['plugin-holder', 'plugin-holder-nopage'],
'fields': ['answer']
}
# show placeholder field if not CMS 3.0
if LooseVersion(cms.__version__) < LooseVersion('3.0'):
fieldsets.append(('Short description', cms_compat_fieldset))
return fieldsets
admin.site.register(Category, CategoryAdmin)
admin.site.register(Question, QuestionAdmin)
class FaqConfigAdmin(AllTranslationsMixin,
PlaceholderAdminMixin,
BaseAppHookConfig,
TranslatableAdmin):
def get_config_fields(self):
return (
'app_title',
'permalink_type', 'non_permalink_handling',
'config.show_description',
)
admin.site.register(FaqConfig, FaqConfigAdmin)