breadcrumbs and page parenting

This commit is contained in:
bkfox 2020-05-21 16:33:07 +02:00
parent ec16c6cd56
commit da0df5554d
4 changed files with 51 additions and 5 deletions

View File

@ -1,10 +1,13 @@
import urllib
from django.contrib import admin from django.contrib import admin
from django.http import QueryDict
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from adminsortable2.admin import SortableInlineAdminMixin from adminsortable2.admin import SortableInlineAdminMixin
from ..models import Category, Article, NavItem from ..models import Category, NavItem, Page
__all__ = ['CategoryAdmin', 'PageAdmin', 'NavItemInline'] __all__ = ['CategoryAdmin', 'PageAdmin', 'NavItemInline']
@ -27,6 +30,9 @@ class PageAdmin(admin.ModelAdmin):
list_filter = ('status', 'category') list_filter = ('status', 'category')
prepopulated_fields = {"slug": ("title",)} prepopulated_fields = {"slug": ("title",)}
# prepopulate fields using changelist's filters
prepopulated_filters = ('parent',)
search_fields = ['title', 'category__title'] search_fields = ['title', 'category__title']
fieldsets = [ fieldsets = [
('', { ('', {
@ -44,6 +50,30 @@ class PageAdmin(admin.ModelAdmin):
return mark_safe('<img src="{}"/>'.format(obj.cover.icons['64'])) \ return mark_safe('<img src="{}"/>'.format(obj.cover.icons['64'])) \
if obj.cover else '' 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): class NavItemInline(SortableInlineAdminMixin, admin.TabularInline):
model = NavItem model = NavItem

View File

@ -40,7 +40,15 @@
<div class="navbar-menu"> <div class="navbar-menu">
{% block usertools %} {% block usertools %}
<div class="navbar-start"> <div class="navbar-start">
<a class="navbar-item" href="{% url "admin:aircox_program_changelist" %}">{% trans "Programs" %}</a> <div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="{% url "admin:aircox_program_changelist" %}">{% trans "Programs" %}</a>
<div class="navbar-dropdown is-boxed">
{% for program in programs %}
<a class="navbar-item" href="{% url "admin:aircox_program_change" program.pk %}">
{{ program.title }}</a>
{% endfor %}
</div>
</div>
<div class="navbar-item has-dropdown is-hoverable"> <div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link" href="{% url "admin:aircox_article_changelist" %}">{% trans "Articles" %}</a> <a class="navbar-link" href="{% url "admin:aircox_article_changelist" %}">{% trans "Articles" %}</a>

View File

@ -27,9 +27,16 @@
{% if not is_popup %} {% if not is_popup %}
{% block breadcrumbs %} {% block breadcrumbs %}
<div class="breadcrumbs"> <div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
&rsaquo; <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{{ cl.opts.app_config.verbose_name }}</a> &rsaquo; <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{{ cl.opts.app_config.verbose_name }}</a>
&rsaquo; {{ cl.opts.verbose_name_plural|capfirst }} {% if parent %}
&rsaquo; <a href="{% url cl.opts|admin_urlname:'changelist' %}">{{ cl.opts.verbose_name_plural|capfirst }}</a>
<b>&rsaquo; {{ parent.title }}</b>
{% else %}
&rsaquo; {{ cl.opts.verbose_name_plural|capfirst }}
{% endif %}
</div> </div>
{% endblock %} {% endblock %}
{% endif %} {% endif %}

View File

@ -15,6 +15,7 @@
{% endblock %} {% endblock %}
{% block filters %} {% block filters %}
{# FIXME #}
{% if filter_categories %} {% if filter_categories %}
<form method="GET" action="" class="navbar-menu"> <form method="GET" action="" class="navbar-menu">
<div class="navbar-start"> <div class="navbar-start">