diff --git a/music_storage/music/models.py b/music_storage/music/models.py index 3ef1d30..6ba19dd 100644 --- a/music_storage/music/models.py +++ b/music_storage/music/models.py @@ -1,6 +1,14 @@ from django.db import models from core.models import BaseModel +import os +import uuid + + +def album_cover_upload_to(instance, filename): + ext = filename.split(".")[-1] + return os.path.join("album_covers", f"{uuid.uuid4()}.{ext}") + class Artist(BaseModel): name = models.CharField(max_length=200) @@ -12,7 +20,9 @@ class Artist(BaseModel): class Album(BaseModel): artist = models.ForeignKey(Artist, on_delete=models.CASCADE, related_name="albums") name = models.CharField(max_length=200) - cover_image = models.ImageField(upload_to="album_covers/", null=True, blank=True) + cover_image = models.ImageField( + upload_to=album_cover_upload_to, null=True, blank=True + ) def __str__(self): return f"{self.artist} - {self.name}" diff --git a/music_storage/static/css/album_list.css b/music_storage/static/css/album_list.css new file mode 100644 index 0000000..f90682b --- /dev/null +++ b/music_storage/static/css/album_list.css @@ -0,0 +1,46 @@ +.album-container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 20px; +} + +.album-card { + background: #ffffff; + border-radius: 10px; + overflow: hidden; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.08); + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +.album-card:hover { + transform: translateY(-4px); + box-shadow: 0 8px 18px rgba(0, 0, 0, 0.15); +} + +.album-link { + text-decoration: none; + color: inherit; + display: block; +} + +.album-cover { + width: 100%; + height: 220px; + object-fit: cover; +} + +.album-info { + padding: 12px; +} + +.album-name { + margin: 0; + font-size: 1.1rem; + font-weight: 600; +} + +.album-artist { + margin: 4px 0 0; + font-size: 0.9rem; + color: #666; +} diff --git a/music_storage/templates/components/album_list.html b/music_storage/templates/components/album_list.html index bc6207a..b5b3c52 100644 --- a/music_storage/templates/components/album_list.html +++ b/music_storage/templates/components/album_list.html @@ -1,11 +1,26 @@ {% load static %} -
No albums available.
+ {% endfor %} +