79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
# 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
|
|
|
|
|
|
class GalleryAdmin(admin.ModelAdmin):
|
|
list_display = ("title", "date_start", "photo_count", "get_tags")
|
|
list_filter = ["date_start", "tags"]
|
|
date_hierarchy = "date_start"
|
|
prepopulated_fields = {"slug": ("title",)}
|
|
model = Gallery
|
|
exclude = ["photos"]
|
|
autocomplete_fields = ["tags"]
|
|
search_fields = [
|
|
"title",
|
|
]
|
|
|
|
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 PhotoAdmin(admin.ModelAdmin):
|
|
list_display = (
|
|
"title",
|
|
"date_taken",
|
|
"date_added",
|
|
"is_public",
|
|
"view_count",
|
|
"admin_thumbnail",
|
|
"get_owner",
|
|
"get_galleries"
|
|
)
|
|
list_filter = ["date_added", "is_public", "owner","galleries"]
|
|
search_fields = ["title", "slug", "caption"]
|
|
list_per_page = 25
|
|
prepopulated_fields = {"slug": ("title",)}
|
|
readonly_fields = ("date_taken",)
|
|
model = Photo
|
|
|
|
def get_owner(self, obj):
|
|
return obj.owner.username
|
|
|
|
|
|
def get_queryset(self, request):
|
|
# Précharge les objets 'galleries' en une seule requête supplémentaire
|
|
return super().get_queryset(request).prefetch_related("owner",'galleries')
|
|
|
|
def get_galleries(self, obj):
|
|
return ", ".join([g.title for g in obj.galleries.all()])## get all linked galeries
|
|
|
|
get_galleries.short_description = _("Gallery")
|
|
get_galleries.admin_order_field = 'galleries__title'
|
|
|
|
get_owner.admin_order_field = "owner"
|
|
get_owner.short_description = _("owner")
|
|
|
|
|
|
class TagAdmin(admin.ModelAdmin):
|
|
list_display = ("name",)
|
|
search_fields = ("name",)
|
|
prepopulated_fields = {"slug": ("name",)}
|
|
model = Tag
|
|
|
|
|
|
admin.site.register(Gallery, GalleryAdmin)
|
|
admin.site.register(Photo, PhotoAdmin)
|
|
admin.site.register(Tag, TagAdmin)
|