diff --git a/aircox/admin/page.py b/aircox/admin/page.py
index f9bebaf..f5575ee 100644
--- a/aircox/admin/page.py
+++ b/aircox/admin/page.py
@@ -1,10 +1,13 @@
+import urllib
+
from django.contrib import admin
+from django.http import QueryDict
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
from adminsortable2.admin import SortableInlineAdminMixin
-from ..models import Category, Article, NavItem
+from ..models import Category, NavItem, Page
__all__ = ['CategoryAdmin', 'PageAdmin', 'NavItemInline']
@@ -27,6 +30,9 @@ class PageAdmin(admin.ModelAdmin):
list_filter = ('status', 'category')
prepopulated_fields = {"slug": ("title",)}
+ # prepopulate fields using changelist's filters
+ prepopulated_filters = ('parent',)
+
search_fields = ['title', 'category__title']
fieldsets = [
('', {
@@ -44,6 +50,30 @@ class PageAdmin(admin.ModelAdmin):
return mark_safe(''.format(obj.cover.icons['64'])) \
if obj.cover else ''
+ def get_changeform_initial_data(self, request):
+ data = super().get_changeform_initial_data(request)
+ filters = QueryDict(request.GET.get('_changelist_filters', ''))
+ data['parent'] = filters.get('parent', None)
+ return data
+
+ def get_common_context(self, query, extra_context=None):
+ extra_context = extra_context or {}
+ parent = query.get('parent', None)
+ if parent is not None:
+ extra_context['parent'] = Page.objects.get(id=parent)
+ return extra_context
+
+ def add_view(self, request, form_url='', extra_context=None):
+ filters = QueryDict(request.GET.get('_changelist_filters', ''))
+ extra_context = self.get_common_context(filters, extra_context)
+ return super().add_view(request, form_url, extra_context)
+
+ # TODO: change_view => parent from object
+
+ def changelist_view(self, request, extra_context=None):
+ extra_context = self.get_common_context(request.GET, extra_context)
+ return super().changelist_view(request, extra_context)
+
class NavItemInline(SortableInlineAdminMixin, admin.TabularInline):
model = NavItem
diff --git a/aircox/templates/admin/base.html b/aircox/templates/admin/base.html
index 459fa92..5efa035 100644
--- a/aircox/templates/admin/base.html
+++ b/aircox/templates/admin/base.html
@@ -40,7 +40,15 @@