From da0df5554d3b2c96168bf183aa682906438fcc25 Mon Sep 17 00:00:00 2001 From: bkfox Date: Thu, 21 May 2020 16:33:07 +0200 Subject: [PATCH] breadcrumbs and page parenting --- aircox/admin/page.py | 32 ++++++++++++++++++++++++- aircox/templates/admin/base.html | 10 +++++++- aircox/templates/admin/change_list.html | 13 +++++++--- aircox/templates/aircox/page_list.html | 1 + 4 files changed, 51 insertions(+), 5 deletions(-) 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 @@