diff --git a/gallery/migrations/0002_alter_photo_slug.py b/gallery/migrations/0002_alter_photo_slug.py new file mode 100644 index 0000000..1256908 --- /dev/null +++ b/gallery/migrations/0002_alter_photo_slug.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.7 on 2025-04-23 12:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('gallery', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='photo', + name='slug', + field=models.SlugField(verbose_name='Photo Slug'), + ), + ] diff --git a/gallery/models/photo.py b/gallery/models/photo.py index 5db49d1..76f455e 100644 --- a/gallery/models/photo.py +++ b/gallery/models/photo.py @@ -20,7 +20,7 @@ def get_upload_path(instance, filename): class Photo(models.Model): album = models.ForeignKey(Album, on_delete=models.CASCADE, related_name='photos', verbose_name="Album") - slug = models.CharField(max_length=50, verbose_name="Photo Slug") + slug = models.SlugField(max_length=50, verbose_name="Photo Slug") photo = models.ImageField(upload_to=get_upload_path, height_field='height', width_field='width', verbose_name="Photo") photo_sm = ImageSpecField(source='photo', processors=[ResizeToFit(320, 320)], format='JPEG', options={'quality': 70}) @@ -42,10 +42,11 @@ class Photo(models.Model): @property def aspect_ratio(self): return self.width / self.height - + def save(self, *args, **kwargs): if not self.slug: - self.slug = os.path.basename(self.photo.name) + base, ext = os.path.splitext(os.path.basename(self.photo.name)) + self.slug = slugify(base) + ext.lower() super().save(*args, **kwargs) def add_like(self): diff --git a/gallery/templates/admin/photo_upload.html b/gallery/templates/admin/photo_upload.html index 7a49a12..aebbc99 100644 --- a/gallery/templates/admin/photo_upload.html +++ b/gallery/templates/admin/photo_upload.html @@ -143,11 +143,24 @@ Promise.allSettled(uploadPromises).then(() => { selectedFiles = newFiles; renderFileList(); - UIkit.notification({ - message: `Upload completed - ${total - newFiles.length} succeeded, ${newFiles.length} failed`, - status: newFiles.length > 0 ? 'warning' : 'success', - pos: 'top-center' - }); + const successCount = total - newFiles.length; + const failCount = newFiles.length; + + if (successCount > 0) { + UIkit.notification({ + message: `${successCount} file${successCount > 1 ? 's were' : ' was'} uploaded successfully.`, + status: 'success', + pos: 'top-center' + }); + } + + if (failCount > 0) { + UIkit.notification({ + message: `${failCount} file${failCount > 1 ? 's failed' : ' failed'} to upload.`, + status: 'danger', + pos: 'top-center' + }); + } }); }