You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.5 KiB
Python

from django.contrib import admin
from django_admin_listfilter_dropdown.filters import DropdownFilter
from .models import KbCategory, KbCategoryName, KbCategoryDescription
from .models import KbEntry, KbEntryAnswer, KbEntryQuestion
def custom_titled_filter(title, c=admin.FieldListFilter):
class Wrapper(c):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.title = title
return Wrapper
class KbCategoryNameInline(admin.TabularInline):
model = KbCategoryName
extra = 0
class KbCategoryDescriptionInline(admin.TabularInline):
model = KbCategoryDescription
extra = 0
class KbCategoryAdmin(admin.ModelAdmin):
list_display = ('slug', 'name', 'entries')
inlines = (KbCategoryNameInline, KbCategoryDescriptionInline)
def entries(self, instance):
return instance.entry_set.count()
class KbEntryQuestionInline(admin.TabularInline):
model = KbEntryQuestion
extra = 0
class KbEntryAnswerInline(admin.StackedInline):
model = KbEntryAnswer
extra = 0
class KbEntryAdmin(admin.ModelAdmin):
list_display = ('category', 'title', 'question', 'score', 'internal')
list_filter = ('category', 'internal')
search_fields = ('category', 'title', 'question', 'answer')
inlines = (KbEntryQuestionInline, KbEntryAnswerInline)
def score(self, instance):
return "%d (%d votes)" % (instance.get_score(), instance.get_vote_count())
admin.site.register(KbCategory, KbCategoryAdmin)
admin.site.register(KbEntry, KbEntryAdmin)