Skip to content
Snippets Groups Projects
Commit 42e58a8c authored by Nadja Geisler's avatar Nadja Geisler :sunny:
Browse files

Merge branch 'feature-improve-filters' into 'main'

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

Closes #128

See merge request !121
parents 96113834 1b612a4a
No related branches found
No related tags found
1 merge request!121Improve filters in admin views to restrict options when event filter is active
Pipeline #95576 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