Skip to content
Snippets Groups Projects

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

1 file
+ 14
5
Compare changes
  • Side-by-side
  • Inline
+ 14
5
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
Loading