Skip to content
Snippets Groups Projects
Commit aca81a1f authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

Introduce custom admin

This is the base for custom admin views (with admin design and permission checking)
Replace default admin site with custom admin site in AKModel
Use custom admin index template & apply first basic change
Introduce custom admin base template (including bootstrap loading)
Introduce Mixin for AdminViews
parent db2093de
No related branches found
No related tags found
1 merge request!39Introduce custom admin
from django.apps import AppConfig from django.apps import AppConfig
from django.contrib.admin.apps import AdminConfig
class AkmodelConfig(AppConfig): class AkmodelConfig(AppConfig):
name = 'AKModel' name = 'AKModel'
class AKAdminConfig(AdminConfig):
default_site = 'AKModel.site.AKAdminSite'
from django.contrib.admin import AdminSite
from AKModel.models import Event
class AKAdminSite(AdminSite):
index_template = "admin/ak_index.html"
def get_urls(self):
from django.urls import path
urls = super().get_urls()
urls += [
# path('...', self.admin_view(...)),
]
return urls
def index(self, request, extra_context=None):
if extra_context is None:
extra_context = {}
extra_context["active_events"] = Event.objects.filter(active=True)
return super().index(request, extra_context)
{% extends "admin/index.html" %}
{% load i18n tz %}
{% block content %}
<div style="margin-bottom: 20px;">
<h2>{% trans "Active Events" %}:</h2>
<ul>
{% for event in active_events %}
<li>
{{ event }}
({{ event.start|timezone:event.timezone|date:"d.m.y"}} -
{{ event.end|timezone:event.timezone|date:"d.m.y"}})
</li>
{% endfor %}
</ul>
</div>
{{ block.super }}
{% endblock %}
from django.contrib import admin
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.views.generic import TemplateView from django.views.generic import TemplateView
from rest_framework import viewsets, permissions, mixins from rest_framework import viewsets, permissions, mixins
...@@ -50,6 +51,13 @@ class FilterByEventSlugMixin(EventSlugMixin): ...@@ -50,6 +51,13 @@ class FilterByEventSlugMixin(EventSlugMixin):
return super().get_queryset().filter(event=self.event) return super().get_queryset().filter(event=self.event)
class AdminViewMixin:
def get_context_data(self, **kwargs):
extra = admin.site.each_context(self.request)
extra.update(super().get_context_data(**kwargs))
return extra
class AKOwnerViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet): class AKOwnerViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelMixin, viewsets.GenericViewSet):
permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,) permission_classes = (permissions.DjangoModelPermissionsOrAnonReadOnly,)
serializer_class = AKOwnerSerializer serializer_class = AKOwnerSerializer
......
...@@ -37,7 +37,7 @@ INSTALLED_APPS = [ ...@@ -37,7 +37,7 @@ INSTALLED_APPS = [
'AKSubmission.apps.AksubmissionConfig', 'AKSubmission.apps.AksubmissionConfig',
'AKScheduling.apps.AkschedulingConfig', 'AKScheduling.apps.AkschedulingConfig',
'AKPlan.apps.AkplanConfig', 'AKPlan.apps.AkplanConfig',
'django.contrib.admin', 'AKModel.apps.AKAdminConfig',
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
'django.contrib.sessions', 'django.contrib.sessions',
......
{% extends "admin/base_site.html" %}
{% load bootstrap4 %}
{% load fontawesome_5 %}
{% block extrahead %}
{% bootstrap_css %}
{% bootstrap_javascript jquery='slim' %}
{% fontawesome_5_static %}
<style>
a.btn {
color: #FFFFFF;
}
.block-header {
margin-top: 20px;
}
</style>
{% endblock %}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment