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

Improve filters in admin views to restrict options when event filter is active

For admin views of AK (category, requirements), Room (properties), AKSlot (room) the mentioned filters now only show choices related to the current event if such a filter is active at the same time.
This implements #128
Additionally, the filter ordering was adapted for all admin views (event now always shows up first)
parent 26cc3f0f
No related branches found
No related tags found
No related merge requests found
Pipeline #81351 passed
from django import forms
from django.apps import apps
from django.contrib import admin
from django.contrib.admin import SimpleListFilter
from django.contrib.admin import SimpleListFilter, RelatedFieldListFilter
from django.db.models import Count, F
from django.shortcuts import render, redirect
from django.urls import reverse_lazy
......@@ -19,6 +19,15 @@ from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequire
from AKModel.urls import get_admin_urls_event_wizard, get_admin_urls_event
class EventRelatedFieldListFilter(RelatedFieldListFilter):
def field_choices(self, field, request, model_admin):
ordering = self.field_admin_ordering(field, request, model_admin)
limit_choices = {}
if "event__id__exact" in request.GET:
limit_choices['event__id__exact'] = request.GET["event__id__exact"]
return field.get_choices(include_blank=False, limit_choices_to=limit_choices, ordering=ordering)
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
model = Event
......@@ -57,7 +66,7 @@ class EventAdmin(admin.ModelAdmin):
class AKOwnerAdmin(admin.ModelAdmin):
model = AKOwner
list_display = ['name', 'institution', 'event']
list_filter = ['institution', 'event']
list_filter = ['event', 'institution']
list_editable = []
ordering = ['name']
......@@ -160,7 +169,7 @@ class AKAdminForm(forms.ModelForm):
class AKAdmin(SimpleHistoryAdmin):
model = AK
list_display = ['name', 'short_name', 'category', 'track', 'is_wish', 'interest', 'interest_counter', 'event']
list_filter = ['category', WishFilter, 'event']
list_filter = ['event', WishFilter, ('category', EventRelatedFieldListFilter), ('requirements', EventRelatedFieldListFilter)]
list_editable = ['short_name', 'track', 'interest', 'interest_counter']
ordering = ['pk']
actions = ['wiki_export']
......@@ -210,7 +219,7 @@ class RoomForm(AvailabilitiesFormMixin, forms.ModelForm):
class RoomAdmin(admin.ModelAdmin):
model = Room
list_display = ['name', 'location', 'capacity', 'event']
list_filter = ['location', 'properties', 'event']
list_filter = ['event', ('properties', EventRelatedFieldListFilter), 'location']
list_editable = []
ordering = ['location', 'name']
change_form_template = "admin/AKModel/room_change_form.html"
......@@ -241,7 +250,7 @@ class AKSlotAdminForm(forms.ModelForm):
class AKSlotAdmin(admin.ModelAdmin):
model = AKSlot
list_display = ['id', 'ak', 'room', 'start', 'duration', 'event']
list_filter = ['room', 'event']
list_filter = ['event', ('room', EventRelatedFieldListFilter)]
ordering = ['start']
readonly_fields = ['ak_details_link', 'updated']
form = AKSlotAdminForm
......
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