diff --git a/program/models.py b/program/models.py index ba2b09ecae686970b9b872ba33090cf1b2454294..bad049fc71e03a976619122b1da5ccadb574f361 100644 --- a/program/models.py +++ b/program/models.py @@ -47,6 +47,58 @@ class ScheduleConflictError(ValidationError): self.conflicts = conflicts +class ModelWithImageFields(models.Model): + """Abstract model that adds: + - `image`, a `VersatileImageField` + - `image_ppoi`, a `PPOIField` + - `image_width`, a `PositiveIntegerField` + - `image_height`, a `PositiveIntegerField` + - `image_credits`, a `TextField` + - `image_alt_text`, a `TextField` + """ + + image = VersatileImageField( + blank=True, + null=True, + upload_to="images", + width_field="image_width", + height_field="image_height", + ppoi_field="image_ppoi", + ) + image_ppoi = PPOIField() + image_width = models.PositiveIntegerField(blank=True, null=True, editable=False) + image_height = models.PositiveIntegerField(blank=True, null=True, editable=False) + image_credits = models.TextField(blank=True, null=True) + image_alt_text = models.TextField(blank=True, null=True) + + class Meta: + abstract = True + + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + + if self.image.name and THUMBNAIL_SIZES: + for size in THUMBNAIL_SIZES: + self.image.thumbnail = self.image.crop[size].name + + +class ModelWithCreatedUpdatedFields(models.Model): + """Abstract model that adds: + - `created_at`, a `DateTimeField` with `auto_now_add=True` + - `updated_at`, a `DateTimeField` with `auto_now=True` + - `created_by`, a `CharField` + - `updated_by`, a `CharField` + """ + + created_at = models.DateTimeField(auto_now_add=True) + created_by = models.CharField() + updated_at = models.DateTimeField(auto_now=True) + updated_by = models.CharField() + + class Meta: + abstract = True + + class Type(models.Model): name = models.CharField(max_length=32) slug = models.SlugField(max_length=32, unique=True)