From 266d77105e814d9c0520a0e59d7f3b0170a73246 Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Wed, 3 Aug 2022 17:01:33 -0400 Subject: [PATCH] Add abstract models --- program/models.py | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/program/models.py b/program/models.py index ba2b09ec..bad049fc 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) -- GitLab