Files
fet2020/fet2020/gallery/models.py
2025-02-01 01:21:44 +01:00

88 lines
2.4 KiB
Python

import logging
from random import randint
from django.conf import settings
from django.db import models
from django.urls import reverse
from django.utils import timezone
from django.utils.text import slugify
from .choices import Status
from .managers import AlbumManager
from .utils import get_image_list
logger = logging.getLogger(__name__)
class Album(models.Model):
title = models.CharField(verbose_name="Titel", max_length=200)
slug = models.SlugField(unique=True, null=True, blank=True)
folder_name = models.CharField(verbose_name="Ordner Name", max_length=200)
thumbnail = models.CharField(verbose_name="Thumbnail", max_length=200, blank=True, default="")
event_date = models.DateField(
verbose_name="Event Datum", null=True, blank=True, default=timezone.now
)
event_place = models.CharField(max_length=200, blank=True)
photographer = models.CharField(
verbose_name="Fotograph(en)", max_length=200, blank=True, default=""
)
# TextChoices
Status = Status
status = models.CharField(max_length=2, choices=Status.choices, default=Status.DRAFT)
description = models.TextField(blank=True, default="")
# Managers
objects = AlbumManager()
class Meta:
verbose_name = "Album"
verbose_name_plural = "Alben"
def __str__(self):
return self.title
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse("gallery:album", kwargs={"slug": self.slug})
def clean(self):
if not self.images:
logger.info("No thumbnails are generated.")
@property
def images(self) -> list:
return get_image_list(self.folder_name)
def get_images_length_sub_3(self):
return len(self.images) - 3
def get_model_name(self):
return self._meta.model_name
@property
def get_album_thumbnail(self):
if img_list := self.images:
return next(
(
img["thumb_url"]
for img in img_list
if self.thumbnail and self.thumbnail in img["title"]
),
img_list[randint(0, len(img_list) - 1)]["thumb_url"],
)
self.status = Album.Status.DRAFT
logger.info("Album '%s' is empty.", self.title)
return settings.STATIC_URL + "img/FET-Logo-2014-quadrat.png"