forked from rc/aircox
breadcrumbs and page parenting
This commit is contained in:
@ -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('<img src="{}"/>'.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
|
||||
|
Reference in New Issue
Block a user