add custom image model, fetch alt text
This commit is contained in:
@ -0,0 +1,29 @@
|
||||
# Generated by Django 5.0.6 on 2024-05-15 01:46
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("associations", "0005_associationindex_lead"),
|
||||
("images", "0002_alter_customimage_options_alter_customimage_alt"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="associationpage",
|
||||
name="logo",
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="associationpage",
|
||||
name="logo",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to="images.customimage",
|
||||
),
|
||||
),
|
||||
]
|
@ -52,7 +52,7 @@ class AssociationPage(Page):
|
||||
max_length=64, choices=AssociationType, default=AssociationType.FORENING
|
||||
)
|
||||
logo = models.ForeignKey(
|
||||
"wagtailimages.Image",
|
||||
"images.CustomImage",
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
|
@ -25,6 +25,7 @@ BASE_DIR = os.path.dirname(PROJECT_DIR)
|
||||
|
||||
INSTALLED_APPS = [
|
||||
"dnscms",
|
||||
"images",
|
||||
"home",
|
||||
"generic",
|
||||
"associations",
|
||||
@ -159,6 +160,7 @@ MEDIA_URL = "/media/"
|
||||
# Wagtail settings
|
||||
|
||||
WAGTAIL_SITE_NAME = "dnscms"
|
||||
WAGTAILIMAGES_IMAGE_MODEL = "images.CustomImage"
|
||||
|
||||
# Search
|
||||
# https://docs.wagtail.org/en/stable/topics/search/backends.html
|
||||
@ -184,6 +186,7 @@ GRAPPLE = {
|
||||
"associations",
|
||||
"events",
|
||||
"venues",
|
||||
"images",
|
||||
],
|
||||
"EXPOSE_GRAPHIQL": True,
|
||||
}
|
||||
|
@ -0,0 +1,30 @@
|
||||
# Generated by Django 5.0.6 on 2024-05-15 01:40
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("events", "0025_delete_featuredeventsorderable"),
|
||||
("images", "0002_alter_customimage_options_alter_customimage_alt"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="eventpage",
|
||||
name="featured_image",
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="eventpage",
|
||||
name="featured_image",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
help_text="Velg et bilde til bruk i programmet og andre visningsflater. Bør være et bilde eller en illustrasjon uten tekst – ikke gjenbruk et Facebook-cover ukritisk!",
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to="images.customimage",
|
||||
),
|
||||
),
|
||||
]
|
@ -127,7 +127,7 @@ class EventPage(Page):
|
||||
# search_description: text (in promote panel)
|
||||
|
||||
featured_image = models.ForeignKey(
|
||||
"wagtailimages.Image",
|
||||
"images.CustomImage",
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
|
0
dnscms/images/__init__.py
Normal file
0
dnscms/images/__init__.py
Normal file
6
dnscms/images/apps.py
Normal file
6
dnscms/images/apps.py
Normal file
@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ImagesConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'images'
|
65
dnscms/images/migrations/0001_initial.py
Normal file
65
dnscms/images/migrations/0001_initial.py
Normal file
@ -0,0 +1,65 @@
|
||||
# Generated by Django 5.0.6 on 2024-05-15 01:33
|
||||
|
||||
import django.db.models.deletion
|
||||
import taggit.managers
|
||||
import wagtail.images.models
|
||||
import wagtail.models.media
|
||||
import wagtail.search.index
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('taggit', '0006_rename_taggeditem_content_type_object_id_taggit_tagg_content_8fc721_idx'),
|
||||
('wagtailcore', '0093_uploadedfile'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CustomImage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255, verbose_name='title')),
|
||||
('file', wagtail.images.models.WagtailImageField(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)),
|
||||
('alt', models.TextField(blank=True, help_text=('Er ikke synlig på nettsiden, men leses opp for de som bruker skjermlesere. Viktig for SEO og tilgjengelighet. Beskriv det du ser i bildet som til en blind person. F.eks. "Logo for Superforeningen" eller "Stemningsbilde fra konserten med Eminem"',), verbose_name='Alternativ bildetekst')),
|
||||
('attribution', models.CharField(blank=True, help_text='Navn på fotograf, illustratør, organisasjon, e.l.', max_length=255, verbose_name='Kreditering')),
|
||||
('collection', models.ForeignKey(default=wagtail.models.media.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='Rendition',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('filter_spec', models.CharField(db_index=True, max_length=255)),
|
||||
('file', wagtail.images.models.WagtailImageField(height_field='height', storage=wagtail.images.models.get_rendition_storage, 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),
|
||||
),
|
||||
]
|
@ -0,0 +1,22 @@
|
||||
# Generated by Django 5.0.6 on 2024-05-15 01:40
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('images', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='customimage',
|
||||
options={'permissions': [('choose_image', 'Can choose image')], 'verbose_name': 'image', 'verbose_name_plural': 'images'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='customimage',
|
||||
name='alt',
|
||||
field=models.CharField(blank=True, help_text=('Er ikke synlig på nettsiden, men leses opp for de som bruker skjermlesere. Viktig for SEO og tilgjengelighet. Beskriv det du ser i bildet som til en blind person. F.eks. "Logo for Superforeningen" eller "Stemningsbilde fra konserten med Eminem"',), max_length=512, verbose_name='Alternativ bildetekst'),
|
||||
),
|
||||
]
|
0
dnscms/images/migrations/__init__.py
Normal file
0
dnscms/images/migrations/__init__.py
Normal file
51
dnscms/images/models.py
Normal file
51
dnscms/images/models.py
Normal file
@ -0,0 +1,51 @@
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from grapple.models import (
|
||||
GraphQLString,
|
||||
)
|
||||
from wagtail.images.models import AbstractImage, AbstractRendition, Image
|
||||
|
||||
|
||||
class CustomImage(AbstractImage):
|
||||
alt = models.CharField(
|
||||
max_length=512,
|
||||
blank=True,
|
||||
verbose_name="Alternativ bildetekst",
|
||||
help_text=(
|
||||
"Er ikke synlig på nettsiden, men leses opp for de som bruker skjermlesere. "
|
||||
"Viktig for SEO og tilgjengelighet. "
|
||||
"Beskriv det du ser i bildet som til en blind person. "
|
||||
'F.eks. "Logo for Superforeningen" eller "Stemningsbilde fra konserten med Eminem"',
|
||||
),
|
||||
)
|
||||
attribution = models.CharField(
|
||||
max_length=255,
|
||||
blank=True,
|
||||
verbose_name="Kreditering",
|
||||
help_text="Navn på fotograf, illustratør, organisasjon, e.l.",
|
||||
)
|
||||
|
||||
admin_form_fields = Image.admin_form_fields + ("alt", "attribution")
|
||||
|
||||
@property
|
||||
def default_alt_text(self):
|
||||
return self.alt or self.title
|
||||
|
||||
class Meta(AbstractImage.Meta):
|
||||
verbose_name = _("image")
|
||||
verbose_name_plural = _("images")
|
||||
permissions = [
|
||||
("choose_image", "Can choose image"),
|
||||
]
|
||||
|
||||
graphql_fields = [
|
||||
GraphQLString("alt"),
|
||||
GraphQLString("attribution"),
|
||||
]
|
||||
|
||||
|
||||
class Rendition(AbstractRendition):
|
||||
image = models.ForeignKey(CustomImage, on_delete=models.CASCADE, related_name="renditions")
|
||||
|
||||
class Meta:
|
||||
unique_together = (("image", "filter_spec", "focal_point_key"),)
|
@ -0,0 +1,30 @@
|
||||
# Generated by Django 5.0.6 on 2024-05-15 01:40
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("images", "0002_alter_customimage_options_alter_customimage_alt"),
|
||||
("venues", "0002_venueindex"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name="venuepage",
|
||||
name="featured_image",
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="venuepage",
|
||||
name="featured_image",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
help_text="Bilde av lokalet",
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="+",
|
||||
to="images.customimage",
|
||||
),
|
||||
),
|
||||
]
|
@ -22,7 +22,7 @@ class VenuePage(Page):
|
||||
show_in_menus = False
|
||||
|
||||
featured_image = models.ForeignKey(
|
||||
"wagtailimages.Image",
|
||||
"images.CustomImage",
|
||||
null=True,
|
||||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
|
Reference in New Issue
Block a user