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 import forms
from django.apps import apps from django.apps import apps
from django.contrib import admin 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.db.models import Count, F
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.urls import reverse_lazy from django.urls import reverse_lazy
...@@ -19,6 +19,15 @@ from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequire ...@@ -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 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) @admin.register(Event)
class EventAdmin(admin.ModelAdmin): class EventAdmin(admin.ModelAdmin):
model = Event model = Event
...@@ -57,7 +66,7 @@ class EventAdmin(admin.ModelAdmin): ...@@ -57,7 +66,7 @@ class EventAdmin(admin.ModelAdmin):
class AKOwnerAdmin(admin.ModelAdmin): class AKOwnerAdmin(admin.ModelAdmin):
model = AKOwner model = AKOwner
list_display = ['name', 'institution', 'event'] list_display = ['name', 'institution', 'event']
list_filter = ['institution', 'event'] list_filter = ['event', 'institution']
list_editable = [] list_editable = []
ordering = ['name'] ordering = ['name']
...@@ -160,7 +169,7 @@ class AKAdminForm(forms.ModelForm): ...@@ -160,7 +169,7 @@ class AKAdminForm(forms.ModelForm):
class AKAdmin(SimpleHistoryAdmin): class AKAdmin(SimpleHistoryAdmin):
model = AK model = AK
list_display = ['name', 'short_name', 'category', 'track', 'is_wish', 'interest', 'interest_counter', 'event'] 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'] list_editable = ['short_name', 'track', 'interest', 'interest_counter']
ordering = ['pk'] ordering = ['pk']
actions = ['wiki_export'] actions = ['wiki_export']
...@@ -210,7 +219,7 @@ class RoomForm(AvailabilitiesFormMixin, forms.ModelForm): ...@@ -210,7 +219,7 @@ class RoomForm(AvailabilitiesFormMixin, forms.ModelForm):
class RoomAdmin(admin.ModelAdmin): class RoomAdmin(admin.ModelAdmin):
model = Room model = Room
list_display = ['name', 'location', 'capacity', 'event'] list_display = ['name', 'location', 'capacity', 'event']
list_filter = ['location', 'properties', 'event'] list_filter = ['event', ('properties', EventRelatedFieldListFilter), 'location']
list_editable = [] list_editable = []
ordering = ['location', 'name'] ordering = ['location', 'name']
change_form_template = "admin/AKModel/room_change_form.html" change_form_template = "admin/AKModel/room_change_form.html"
...@@ -241,7 +250,7 @@ class AKSlotAdminForm(forms.ModelForm): ...@@ -241,7 +250,7 @@ class AKSlotAdminForm(forms.ModelForm):
class AKSlotAdmin(admin.ModelAdmin): class AKSlotAdmin(admin.ModelAdmin):
model = AKSlot model = AKSlot
list_display = ['id', 'ak', 'room', 'start', 'duration', 'event'] list_display = ['id', 'ak', 'room', 'start', 'duration', 'event']
list_filter = ['room', 'event'] list_filter = ['event', ('room', EventRelatedFieldListFilter)]
ordering = ['start'] ordering = ['start']
readonly_fields = ['ak_details_link', 'updated'] readonly_fields = ['ak_details_link', 'updated']
form = AKSlotAdminForm 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