# This file is part of photo21 # Copyright (C) 2022 Amicale des élèves de l'ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later from django.contrib import admin from django.utils.translation import gettext_lazy as _ from .models import Gallery, Photo, Tag, Video class GalleryAdmin(admin.ModelAdmin): list_display = ("title", "date_start", "photo_count", "get_tags") list_filter = ["date_start", "tags", "is_public"] date_hierarchy = "date_start" prepopulated_fields = {"slug": ("title",)} model = Gallery autocomplete_fields = ["tags"] search_fields = ["title",] filter_horizontal = ("photos",) def get_tags(self, obj): return ", ".join([t.name for t in obj.tags.all()]) get_tags.short_description = _("tags") def get_queryset(self, request): # Cette étape est correcte et essentielle return super().get_queryset(request).prefetch_related("tags") class MediaAdmin(admin.ModelAdmin): """Shared admin base for Photo and Video.""" list_filter = ["date_added", "is_public", "owner", "galleries"] search_fields = ["title", "slug", "caption"] list_per_page = 25 prepopulated_fields = {"slug": ("title",)} def get_owner(self, obj): return obj.owner.username def get_galleries(self, obj): return ", ".join([g.title for g in obj.galleries.all()]) def get_queryset(self, request): return super().get_queryset(request).prefetch_related("owner", "galleries") get_owner.admin_order_field = "owner" get_owner.short_description = _("owner") get_galleries.short_description = _("Gallery") class PhotoAdmin(MediaAdmin): list_display = ("title", "date_taken", "date_added", "is_public", "view_count", "admin_thumbnail", "get_owner", "get_galleries") readonly_fields = ("date_taken",) model = Photo class TagAdmin(admin.ModelAdmin): list_display = ("name",) search_fields = ("name",) prepopulated_fields = {"slug": ("name",)} model = Tag class VideoAdmin(MediaAdmin): list_display = ("title", "date_added", "is_public", "get_owner", "get_galleries") model = Video admin.site.register(Gallery, GalleryAdmin) admin.site.register(Photo, PhotoAdmin) admin.site.register(Video, VideoAdmin) admin.site.register(Tag, TagAdmin)