diff --git a/gallery/admin.py b/gallery/admin.py index b6398eb..77cd388 100644 --- a/gallery/admin.py +++ b/gallery/admin.py @@ -11,6 +11,7 @@ from imagekit.processors import ResizeToFit from gallery.models import Album, City, Location, Photo, Redir +# Thumbnail-luokka admin-näkymää varten class AdminThumbnailSpec(ImageSpec): processors = [ResizeToFit(100, 100)] format = 'JPEG' @@ -18,6 +19,7 @@ class AdminThumbnailSpec(ImageSpec): def cached_admin_thumb(instance): + """Palauttaa cachetetun thumbnailin, jos kuva on olemassa.""" if instance.photo: cached = ImageCacheFile(AdminThumbnailSpec(instance.photo)) cached.generate() @@ -25,6 +27,7 @@ def cached_admin_thumb(instance): return None +# 🔹 RedirAdmin – uudelleenohjausten hallinta class RedirAdmin(admin.ModelAdmin): list_display = ('path', 'album', 'test_url') search_fields = ('path',) @@ -33,18 +36,21 @@ class RedirAdmin(admin.ModelAdmin): list_editable = ('album',) def formfield_for_foreignkey(self, db_field, request, **kwargs): + """Järjestää albumivalikon aakkosjärjestykseen.""" if db_field.name == "album": kwargs["queryset"] = Album.objects.all().order_by('name') return super().formfield_for_foreignkey(db_field, request, **kwargs) def test_url(self, obj): + """Luo linkin, jolla voi testata uudelleenohjauksen.""" return format_html( 'http://nyymix.net/{}', obj.path, obj.path ) - test_url.short_description = "Test redirection" + test_url.short_description = "Test Redirection" +# 🔹 CityAdmin – kaupunkien hallinta class CityAdmin(admin.ModelAdmin): list_display = ('name',) search_fields = ('name',) @@ -52,6 +58,7 @@ class CityAdmin(admin.ModelAdmin): list_per_page = 30 +# 🔹 LocationAdmin – sijaintien hallinta class LocationAdmin(admin.ModelAdmin): list_display = ('city', 'place') list_filter = ('city',) @@ -60,6 +67,7 @@ class LocationAdmin(admin.ModelAdmin): list_per_page = 30 +# 🔹 AlbumAdmin – albumien hallinta class AlbumAdmin(admin.ModelAdmin): prepopulated_fields = {'slug': ('name',)} list_display = ('name', 'location', 'album_date', 'is_public', 'upload_link', 'thumbnail') @@ -68,10 +76,10 @@ class AlbumAdmin(admin.ModelAdmin): list_per_page = 20 list_editable = ('is_public',) readonly_fields = ['cover_preview'] - change_form_template = "admin/gallery/album/change_form.html" def get_urls(self): + """Lisää mukautetun URL-reitin valokuvien lataamiselle.""" urls = super().get_urls() custom_urls = [ path('/upload/', self.admin_site.admin_view(self.upload_photos), name="gallery_album_upload"), @@ -84,14 +92,16 @@ class AlbumAdmin(admin.ModelAdmin): if request.method == 'POST' and request.FILES: uploaded_files = request.FILES.getlist('photo') - for file in uploaded_files: - Photo.objects.create(album=album, photo=file) + if not uploaded_files: + return JsonResponse({"error": "No files uploaded."}, status=400) + + Photo.objects.bulk_create([Photo(album=album, photo=file) for file in uploaded_files]) return JsonResponse({"message": "Photos uploaded successfully!"}) return render(request, 'admin/upload_photos.html', {'album': album}) def upload_link(self, obj): - """Lisää 'Upload Photos' -painikkeen albumin muokkaussivulle""" + """Lisää 'Upload Photos' -painikkeen albumin muokkaussivulle.""" if obj.id: url = reverse("admin:gallery_album_upload", kwargs={"album_id": obj.id}) return format_html('Upload Photos', url) @@ -99,24 +109,27 @@ class AlbumAdmin(admin.ModelAdmin): upload_link.short_description = "Upload Photos" def thumbnail(self, obj): + """Näyttää albumin kansikuvan pikkukuvan.""" if obj.cover and obj.cover.photo: return format_html( '', - obj.cover.photo.url, + obj.cover.photo_sm.url, ) return "-" thumbnail.short_description = "Thumbnail" def cover_preview(self, obj): + """Näyttää albumin kansikuvan suurempana esikatseluna.""" if obj.cover and obj.cover.photo: return format_html( '', - obj.cover.photo.url, + obj.cover.photo_sm.url, ) return "No cover image available" cover_preview.short_description = "Cover Preview" def formfield_for_foreignkey(self, db_field, request, **kwargs): + """Rajoittaa kansikuvan valintaa vain albumin omiin kuviin.""" if db_field.name == "cover": if hasattr(request, 'resolver_match') and request.resolver_match.kwargs.get('object_id'): album_id = request.resolver_match.kwargs['object_id'] @@ -125,6 +138,7 @@ class AlbumAdmin(admin.ModelAdmin): return super().formfield_for_foreignkey(db_field, request, **kwargs) +# 🔹 PhotoAdmin – kuvien hallinta class PhotoAdmin(admin.ModelAdmin): list_display = ('slug', 'album', 'is_favorite', 'admin_thumbnail') list_display_links = ('slug',) @@ -136,6 +150,7 @@ class PhotoAdmin(admin.ModelAdmin): list_editable = ('is_favorite',) +# 🔹 Rekisteröidään admin-paneeliin admin.site.register(City, CityAdmin) admin.site.register(Location, LocationAdmin) admin.site.register(Album, AlbumAdmin) diff --git a/gallery/templates/admin/upload_photos.html b/gallery/templates/admin/upload_photos.html index 7cce70d..a0f2e65 100644 --- a/gallery/templates/admin/upload_photos.html +++ b/gallery/templates/admin/upload_photos.html @@ -1,114 +1,162 @@ {% extends "admin/base_site.html" %} {% block content %} - - Upload Photos to {{ album.name }} - - - - + + Upload Photos to {{ album.name }} {% csrf_token %} - - - - Drag files here or - - - select them - + + + Drag files here or click below to select + - - - Total size: 0 MB - - Upload + + Total size: 0 MB + + + + + Upload + - -{% endblock %} +{% endblock %} \ No newline at end of file
Drag files here or click below to select
Total size: 0 MB