from django.contrib import admin from django.contrib.admin import SimpleListFilter from django.db.models import Count, F from django.shortcuts import render 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 admin.site.register(Event) admin.site.register(AKOwner) admin.site.register(AKCategory) admin.site.register(AKTrack) admin.site.register(AKTag) admin.site.register(AKRequirement) 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 class AKAdmin(admin.ModelAdmin): model = AK list_display = ['name', 'short_name', 'category', 'is_wish'] actions = ['wiki_export'] list_filter = ['category', WishFilter] ordering = ['pk'] def is_wish(self, obj): return obj.wish def wiki_export(self, request, queryset): 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.site.register(AKSlot) admin.site.register(Availability)