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

Merge branch 'improve-admin' into 'main'

Improve admin (faster loading, restriction of foreign key & m2m choices)

Closes #106

See merge request kif/akplanning!94
parents ac506e88 a3fbd2a4
No related branches found
No related tags found
No related merge requests found
...@@ -169,6 +169,24 @@ class WishFilter(SimpleListFilter): ...@@ -169,6 +169,24 @@ class WishFilter(SimpleListFilter):
return queryset return queryset
class AKAdminForm(forms.ModelForm):
class Meta:
widgets = {
'requirements': forms.CheckboxSelectMultiple,
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Filter possible values for foreign keys & m2m when event is specified
if hasattr(self.instance, "event") and self.instance.event is not None:
self.fields["category"].queryset = AKCategory.objects.filter(event=self.instance.event)
self.fields["track"].queryset = AKTrack.objects.filter(event=self.instance.event)
self.fields["owners"].queryset = AKOwner.objects.filter(event=self.instance.event)
self.fields["requirements"].queryset = AKRequirement.objects.filter(event=self.instance.event)
self.fields["conflicts"].queryset = AK.objects.filter(event=self.instance.event)
self.fields["prerequisites"].queryset = AK.objects.filter(event=self.instance.event)
@admin.register(AK) @admin.register(AK)
class AKAdmin(SimpleHistoryAdmin): class AKAdmin(SimpleHistoryAdmin):
model = AK model = AK
...@@ -177,6 +195,7 @@ class AKAdmin(SimpleHistoryAdmin): ...@@ -177,6 +195,7 @@ class AKAdmin(SimpleHistoryAdmin):
list_editable = ['short_name', 'track', 'interest'] list_editable = ['short_name', 'track', 'interest']
ordering = ['pk'] ordering = ['pk']
actions = ['wiki_export'] actions = ['wiki_export']
form = AKAdminForm
def is_wish(self, obj): def is_wish(self, obj):
return obj.wish return obj.wish
...@@ -213,6 +232,10 @@ class RoomForm(AvailabilitiesFormMixin, forms.ModelForm): ...@@ -213,6 +232,10 @@ class RoomForm(AvailabilitiesFormMixin, forms.ModelForm):
kwargs['initial'] = dict() kwargs['initial'] = dict()
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.initial = {**self.initial, **kwargs['initial']} self.initial = {**self.initial, **kwargs['initial']}
# Filter possible values for m2m when event is specified
if hasattr(self.instance, "event") and self.instance.event is not None:
self.fields["properties"].queryset = AKRequirement.objects.filter(event=self.instance.event)
@admin.register(Room) @admin.register(Room)
...@@ -237,15 +260,23 @@ class RoomAdmin(admin.ModelAdmin): ...@@ -237,15 +260,23 @@ class RoomAdmin(admin.ModelAdmin):
) )
class AKSlotAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Filter possible values for foreign keys when event is specified
if hasattr(self.instance, "event") and self.instance.event is not None:
self.fields["ak"].queryset = AK.objects.filter(event=self.instance.event)
self.fields["room"].queryset = Room.objects.filter(event=self.instance.event)
@admin.register(AKSlot) @admin.register(AKSlot)
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 = ['room', 'event']
list_editable = ['ak', 'room', 'start', 'duration']
ordering = ['start'] ordering = ['start']
readonly_fields = ['ak_details_link', 'updated'] readonly_fields = ['ak_details_link', 'updated']
form = AKSlotAdminForm
def get_urls(self): def get_urls(self):
urls = super().get_urls() urls = super().get_urls()
...@@ -302,8 +333,22 @@ class AKOrgaMessageAdmin(admin.ModelAdmin): ...@@ -302,8 +333,22 @@ class AKOrgaMessageAdmin(admin.ModelAdmin):
readonly_fields = ['timestamp', 'ak', 'text'] readonly_fields = ['timestamp', 'ak', 'text']
class ConstraintViolationAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Filter possible values for foreign keys & m2m when event is specified
if hasattr(self.instance, "event") and self.instance.event is not None:
self.fields["ak_owner"].queryset = AKOwner.objects.filter(event=self.instance.event)
self.fields["room"].queryset = Room.objects.filter(event=self.instance.event)
self.fields["requirement"].queryset = AKRequirement.objects.filter(event=self.instance.event)
self.fields["category"].queryset = AKCategory.objects.filter(event=self.instance.event)
self.fields["aks"].queryset = AK.objects.filter(event=self.instance.event)
self.fields["ak_slots"].queryset = AKSlot.objects.filter(event=self.instance.event)
@admin.register(ConstraintViolation) @admin.register(ConstraintViolation)
class ConstraintViolationAdmin(admin.ModelAdmin): class ConstraintViolationAdmin(admin.ModelAdmin):
list_display = ['type', 'level', 'get_details'] list_display = ['type', 'level', 'get_details']
list_filter = ['event'] list_filter = ['event']
readonly_fields = ['timestamp'] readonly_fields = ['timestamp']
form = ConstraintViolationAdminForm
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