From 5c949861bd3e786d22bf9e1738a692ca16ebd146 Mon Sep 17 00:00:00 2001 From: "N. Geisler" <ngeisler@fachschaft.informatik.tu-darmstadt.de> Date: Sun, 10 May 2020 20:05:43 +0200 Subject: [PATCH] configure lists in admin view for each model in AKModelspecify what to display in list what to filter by what to edit in list how to order --- AKModel/admin.py | 113 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 85 insertions(+), 28 deletions(-) diff --git a/AKModel/admin.py b/AKModel/admin.py index 8446259d..815521df 100644 --- a/AKModel/admin.py +++ b/AKModel/admin.py @@ -6,11 +6,17 @@ from django.utils import timezone from django.utils.translation import gettext_lazy as _ from AKModel.availability import Availability -from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, Room, AKSlot +from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, AKSlot, Room @admin.register(Event) class EventAdmin(admin.ModelAdmin): + model = Event + list_display = ['name', 'place', 'start', 'end', 'active'] + list_filter = ['active'] + list_editable = ['active'] + ordering = ['start'] + def get_form(self, request, obj=None, change=False, **kwargs): # Use timezone of event if obj is not None and obj.timezone: @@ -20,40 +26,80 @@ class EventAdmin(admin.ModelAdmin): timezone.activate("UTC") return super().get_form(request, obj, change, **kwargs) -admin.site.register(AKOwner) -admin.site.register(AKCategory) -admin.site.register(AKTrack) -admin.site.register(AKTag) -admin.site.register(AKRequirement) +@admin.register(AKOwner) +class AKOwnerAdmin(admin.ModelAdmin): + model = AKOwner + list_display = ['name', 'institution', 'event'] + list_filter = ['institution', 'event'] + list_editable = [] + ordering = ['name'] -class WishFilter(SimpleListFilter): - title = _("Wish") # a label for our filter - parameter_name = 'wishes' # you can put anything here +@admin.register(AKCategory) +class AKCategoryAdmin(admin.ModelAdmin): + model = AKCategory + list_display = ['name', 'color', 'event'] + list_filter = ['event'] + list_editable = ['color'] + ordering = ['name'] + + +@admin.register(AKTrack) +class AKTrackAdmin(admin.ModelAdmin): + model = AKTrack + list_display = ['name', 'color', 'event'] + list_filter = ['event'] + list_editable = ['color'] + ordering = ['name'] + + +@admin.register(AKTag) +class AKTagAdmin(admin.ModelAdmin): + model = AKTag + list_display = ['name'] + list_filter = [] + list_editable = [] + ordering = ['name'] - def lookups(self, request, model_admin): - # This is where you create filter options; we have two: - return [ - ('WISH', _("Is wish")), - ('NO_WISH', _("Is not a wish")), - ] - def queryset(self, request, queryset): - annotated_queryset = queryset.annotate(owner_count=Count(F('owners'))) - if self.value() == 'NO_WISH': - return annotated_queryset.filter(owner_count__gt=0) - if self.value() == 'WISH': - return annotated_queryset.filter(owner_count=0) - return queryset +@admin.register(AKRequirement) +class AKRequirementAdmin(admin.ModelAdmin): + model = AKRequirement + list_display = ['name', 'event'] + list_filter = ['event'] + list_editable = [] + ordering = ['name'] +class WishFilter(SimpleListFilter): + title = _("Wish") # a label for our filter + parameter_name = 'wishes' # you can put anything here + + def lookups(self, request, model_admin): + # This is where you create filter options; we have two: + return [ + ('WISH', _("Is wish")), + ('NO_WISH', _("Is not a wish")), + ] + + def queryset(self, request, queryset): + annotated_queryset = queryset.annotate(owner_count=Count(F('owners'))) + if self.value() == 'NO_WISH': + return annotated_queryset.filter(owner_count__gt=0) + if self.value() == 'WISH': + return annotated_queryset.filter(owner_count=0) + return queryset + + +@admin.register(AK) class AKAdmin(admin.ModelAdmin): model = AK - list_display = ['name', 'short_name', 'category', 'is_wish'] - actions = ['wiki_export'] - list_filter = ['category', WishFilter] + list_display = ['name', 'short_name', 'category', 'track', 'is_wish', 'interest', 'event'] + list_filter = ['category', WishFilter, 'event'] + list_editable = ['short_name', 'track', 'interest'] ordering = ['pk'] + actions = ['wiki_export'] def is_wish(self, obj): return obj.wish @@ -62,18 +108,29 @@ class AKAdmin(admin.ModelAdmin): return render(request, 'admin/AKModel/wiki_export.html', context={"AKs": queryset}) + wiki_export.short_description = _("Export to wiki syntax") is_wish.boolean = True -admin.site.register(AK, AKAdmin) - -admin.site.register(Room) +@admin.register(Room) +class RoomAdmin(admin.ModelAdmin): + model = Room + list_display = ['name', 'building', 'capacity', 'event'] + list_filter = ['building', 'properties', 'event'] + list_editable = [] + ordering = ['building', 'name'] @admin.register(AKSlot) class AKSlotAdmin(admin.ModelAdmin): + model = AKSlot + list_display = ['id', 'ak', 'room', 'start', 'duration', 'event'] + list_filter = ['room', 'event'] + list_editable = ['ak', 'room', 'start', 'duration'] + ordering = ['start'] + readonly_fields = ['updated'] def get_form(self, request, obj=None, change=False, **kwargs): -- GitLab