From c23c03ec3325f7bd7926e5d694fe264741d232cb Mon Sep 17 00:00:00 2001 From: Jake Howard Date: Tue, 28 Jun 2022 18:54:11 +0100 Subject: [PATCH] Add custom image model --- ..._alter_bloglistpage_hero_image_and_more.py | 35 ++++ ...8_alter_contentpage_hero_image_and_more.py | 35 ++++ .../migrations/0005_alter_homepage_image.py | 24 +++ website/images/__init__.py | 0 website/images/migrations/0001_initial.py | 154 ++++++++++++++++++ website/images/migrations/__init__.py | 0 website/images/models.py | 15 ++ website/settings.py | 3 + 8 files changed, 266 insertions(+) create mode 100644 website/blog/migrations/0007_alter_bloglistpage_hero_image_and_more.py create mode 100644 website/common/migrations/0008_alter_contentpage_hero_image_and_more.py create mode 100644 website/home/migrations/0005_alter_homepage_image.py create mode 100644 website/images/__init__.py create mode 100644 website/images/migrations/0001_initial.py create mode 100644 website/images/migrations/__init__.py create mode 100644 website/images/models.py diff --git a/website/blog/migrations/0007_alter_bloglistpage_hero_image_and_more.py b/website/blog/migrations/0007_alter_bloglistpage_hero_image_and_more.py new file mode 100644 index 0000000..477825a --- /dev/null +++ b/website/blog/migrations/0007_alter_bloglistpage_hero_image_and_more.py @@ -0,0 +1,35 @@ +# Generated by Django 4.0.5 on 2022-06-28 17:52 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("images", "__first__"), + ("blog", "0006_alter_bloglistpage_body_alter_blogpostpage_body"), + ] + + operations = [ + migrations.AlterField( + model_name="bloglistpage", + name="hero_image", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="images.customimage", + ), + ), + migrations.AlterField( + model_name="blogpostpage", + name="hero_image", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="images.customimage", + ), + ), + ] diff --git a/website/common/migrations/0008_alter_contentpage_hero_image_and_more.py b/website/common/migrations/0008_alter_contentpage_hero_image_and_more.py new file mode 100644 index 0000000..2d8494c --- /dev/null +++ b/website/common/migrations/0008_alter_contentpage_hero_image_and_more.py @@ -0,0 +1,35 @@ +# Generated by Django 4.0.5 on 2022-06-28 17:52 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("images", "__first__"), + ("common", "0007_alter_contentpage_body_alter_listingpage_body"), + ] + + operations = [ + migrations.AlterField( + model_name="contentpage", + name="hero_image", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="images.customimage", + ), + ), + migrations.AlterField( + model_name="listingpage", + name="hero_image", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="images.customimage", + ), + ), + ] diff --git a/website/home/migrations/0005_alter_homepage_image.py b/website/home/migrations/0005_alter_homepage_image.py new file mode 100644 index 0000000..23959f8 --- /dev/null +++ b/website/home/migrations/0005_alter_homepage_image.py @@ -0,0 +1,24 @@ +# Generated by Django 4.0.5 on 2022-06-28 17:52 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("images", "__first__"), + ("home", "0004_homepage_image"), + ] + + operations = [ + migrations.AlterField( + model_name="homepage", + name="image", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="images.customimage", + ), + ), + ] diff --git a/website/images/__init__.py b/website/images/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/images/migrations/0001_initial.py b/website/images/migrations/0001_initial.py new file mode 100644 index 0000000..e4960fb --- /dev/null +++ b/website/images/migrations/0001_initial.py @@ -0,0 +1,154 @@ +# Generated by Django 4.0.5 on 2022-06-28 17:52 + +import django.db.models.deletion +import taggit.managers +import wagtail.images.models +import wagtail.models.collections +import wagtail.search.index +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("taggit", "0004_alter_taggeditem_content_type_alter_taggeditem_tag"), + ("wagtailcore", "0069_log_entry_jsonfield"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="CustomImage", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=255, verbose_name="title")), + ( + "file", + models.ImageField( + height_field="height", + upload_to=wagtail.images.models.get_upload_to, + verbose_name="file", + width_field="width", + ), + ), + ("width", models.IntegerField(editable=False, verbose_name="width")), + ("height", models.IntegerField(editable=False, verbose_name="height")), + ( + "created_at", + models.DateTimeField( + auto_now_add=True, db_index=True, verbose_name="created at" + ), + ), + ("focal_point_x", models.PositiveIntegerField(blank=True, null=True)), + ("focal_point_y", models.PositiveIntegerField(blank=True, null=True)), + ( + "focal_point_width", + models.PositiveIntegerField(blank=True, null=True), + ), + ( + "focal_point_height", + models.PositiveIntegerField(blank=True, null=True), + ), + ("file_size", models.PositiveIntegerField(editable=False, null=True)), + ( + "file_hash", + models.CharField( + blank=True, db_index=True, editable=False, max_length=40 + ), + ), + ( + "collection", + models.ForeignKey( + default=wagtail.models.collections.get_root_collection_id, + on_delete=django.db.models.deletion.CASCADE, + related_name="+", + to="wagtailcore.collection", + verbose_name="collection", + ), + ), + ( + "tags", + taggit.managers.TaggableManager( + blank=True, + help_text=None, + through="taggit.TaggedItem", + to="taggit.Tag", + verbose_name="tags", + ), + ), + ( + "uploaded_by_user", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to=settings.AUTH_USER_MODEL, + verbose_name="uploaded by user", + ), + ), + ], + options={ + "abstract": False, + }, + bases=( + wagtail.images.models.ImageFileMixin, + wagtail.search.index.Indexed, + models.Model, + ), + ), + migrations.CreateModel( + name="CustomRendition", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("filter_spec", models.CharField(db_index=True, max_length=255)), + ( + "file", + models.ImageField( + height_field="height", + upload_to=wagtail.images.models.get_rendition_upload_to, + width_field="width", + ), + ), + ("width", models.IntegerField(editable=False)), + ("height", models.IntegerField(editable=False)), + ( + "focal_point_key", + models.CharField( + blank=True, default="", editable=False, max_length=16 + ), + ), + ( + "image", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="renditions", + to="images.customimage", + ), + ), + ], + options={ + "unique_together": {("image", "filter_spec", "focal_point_key")}, + }, + bases=(wagtail.images.models.ImageFileMixin, models.Model), + ), + ] diff --git a/website/images/migrations/__init__.py b/website/images/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/website/images/models.py b/website/images/models.py new file mode 100644 index 0000000..6043df1 --- /dev/null +++ b/website/images/models.py @@ -0,0 +1,15 @@ +from django.db import models +from wagtail.images.models import AbstractImage, AbstractRendition + + +class CustomImage(AbstractImage): + pass + + +class CustomRendition(AbstractRendition): + image = models.ForeignKey( + CustomImage, on_delete=models.CASCADE, related_name="renditions" + ) + + class Meta: + unique_together = (("image", "filter_spec", "focal_point_key"),) diff --git a/website/settings.py b/website/settings.py index b940d91..819cf90 100644 --- a/website/settings.py +++ b/website/settings.py @@ -23,6 +23,7 @@ INSTALLED_APPS = [ "website.home", "website.search", "website.blog", + "website.images", "website.contrib.code_block", "wagtail.contrib.forms", "wagtail.contrib.redirects", @@ -141,6 +142,8 @@ WAGTAILADMIN_BASE_URL = f"https://{BASE_HOSTNAME}" DEFAULT_AUTO_FIELD = "django.db.models.AutoField" +WAGTAILIMAGES_IMAGE_MODEL = "images.CustomImage" + if DEBUG: # Add django-browser-reload INSTALLED_APPS.append("django_browser_reload")