diff --git a/server/book/admin.py b/server/book/admin.py index ae78ac1c..d45bcd4d 100644 --- a/server/book/admin.py +++ b/server/book/admin.py @@ -1,20 +1,7 @@ from django.contrib import admin from book.models import Book, Topic, Module - - -class TopicListFilter(admin.SimpleListFilter): - title = 'topic modules' - parameter_name = 'topic_modules' - - def lookups(self, request, model_admin): - return list((topic.slug, topic.title) for topic in Topic.objects.all()) - - def queryset(self, request, queryset): - filter_value = self.value() - topic = Topic.objects.filter(slug=filter_value).first() - if topic: - return Module.get_topic_modules(topic) +from core.wagtail_utils import wagtail_parent_filter @admin.register(Book) @@ -25,9 +12,10 @@ class BookAdmin(admin.ModelAdmin): @admin.register(Topic) class TopicAdmin(admin.ModelAdmin): list_display = ('title', 'slug', 'teaser', 'description') + list_filter = (wagtail_parent_filter(Book, Topic),) @admin.register(Module) class ModuleAdmin(admin.ModelAdmin): list_display = ('title', 'slug', 'meta_title', 'teaser') - list_filter = (TopicListFilter, ) + list_filter = (wagtail_parent_filter(Topic, Module),) diff --git a/server/core/wagtail_utils.py b/server/core/wagtail_utils.py new file mode 100644 index 00000000..0a0f7d13 --- /dev/null +++ b/server/core/wagtail_utils.py @@ -0,0 +1,18 @@ +from django.contrib import admin + + +def wagtail_parent_filter(parent_cls, child_cls): + class ParentValueFilter(admin.SimpleListFilter): + title = 'parent' + parameter_name = 'parent' + + def lookups(self, request, model_admin): + return list((parent.slug, parent.title) for parent in parent_cls.objects.all()) + + def queryset(self, request, queryset): + filter_value = self.value() + parent = parent_cls.objects.filter(slug=filter_value).first() + if parent: + return child_cls.objects.filter(id__in=parent.get_child_ids()).live() + + return ParentValueFilter