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
49 lines
1.5 KiB
Python
5 years ago
|
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)
|