feat: add people sections and opt-in read more
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# Generated by Django 5.2.16 on 2026-10-12 04:39
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pages', '0019_blogpost_alter_aboutsection_video_styled_background_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='BlogPostPartner',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('role', models.CharField(choices=[('organizer', 'Organizer'), ('collaborator', 'Collaborator')], default='collaborator', max_length=20)),
|
||||
('name', models.CharField(max_length=200)),
|
||||
('description', models.TextField(blank=True)),
|
||||
('image', models.ImageField(blank=True, null=True, upload_to='blog/partners/')),
|
||||
('image_alt', models.CharField(blank=True, max_length=240)),
|
||||
('url', models.URLField(blank=True)),
|
||||
('order', models.PositiveIntegerField(default=0)),
|
||||
('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='partners', to='pages.blogpost')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Article organizer or collaborator',
|
||||
'verbose_name_plural': 'Article organizers and collaborators',
|
||||
'ordering': ['role', 'order', 'pk'],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 5.2.16 on 2026-10-12 04:42
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pages', '0020_blogpostpartner'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='blogpostpartner',
|
||||
options={'ordering': ['order', 'pk'], 'verbose_name': 'Article organizer or collaborator', 'verbose_name_plural': 'Article organizers and collaborators'},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,53 @@
|
||||
# Generated by Django 5.2.16 on 2026-10-12 04:52
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pages', '0021_alter_blogpostpartner_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='aboutsection',
|
||||
name='read_more_content',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this text with a Read more button.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='aboutsectionitem',
|
||||
name='read_more_content',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this text with a Read more button.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='blogpost',
|
||||
name='read_more_content',
|
||||
field=models.BooleanField(default=False, help_text='Collapse article text with a Read more button.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='custompagesection',
|
||||
name='read_more_content',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this text with a Read more button.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='custompagesection',
|
||||
name='read_more_description',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this description with a Read more button.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='custompagesectionitem',
|
||||
name='read_more_content',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this text with a Read more button.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='homepagesection',
|
||||
name='read_more_description',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this description with a Read more button.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='homepagesectionitem',
|
||||
name='read_more_content',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this text with a Read more button.'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 5.2.16 on 2026-10-12 11:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pages', '0022_aboutsection_read_more_content_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='blogpostpartner',
|
||||
options={'ordering': ['-role', 'order', 'pk'], 'verbose_name': 'Article organizer or collaborator', 'verbose_name_plural': 'Article organizers and collaborators'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogpostpartner',
|
||||
name='order',
|
||||
field=models.PositiveIntegerField(default=0, help_text='Smaller numbers appear first within each role. Organizers always appear before collaborators.', verbose_name='Display order'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,58 @@
|
||||
# Generated by Django 5.2.16 on 2026-10-12 11:11
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pages', '0023_alter_blogpostpartner_options_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='aboutsection',
|
||||
name='read_more_subtitle',
|
||||
field=models.BooleanField(default=False, help_text='Collapse a long hero subtitle with Read more.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='blogpost',
|
||||
name='partners_eyebrow',
|
||||
field=models.CharField(blank=True, default='The people behind this article', max_length=160),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='blogpost',
|
||||
name='partners_title',
|
||||
field=models.CharField(default='Organizers & collaborators', max_length=200),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='blogpost',
|
||||
name='read_more_excerpt',
|
||||
field=models.BooleanField(default=False, help_text='Collapse a long excerpt with Read more on the listing and article page.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='blogpostpartner',
|
||||
name='read_more_description',
|
||||
field=models.BooleanField(default=False, help_text="Collapse this person's description with Read more when it is long."),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='custompagesection',
|
||||
name='read_more_subtitle',
|
||||
field=models.BooleanField(default=False, help_text='Collapse a long hero subtitle with Read more.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='herosection',
|
||||
name='read_more_description',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this description with Read more when it is long.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='herosection',
|
||||
name='read_more_subtitle',
|
||||
field=models.BooleanField(default=False, help_text='Collapse the subtitle with Read more when it is long.'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='pagevideo',
|
||||
name='read_more_description',
|
||||
field=models.BooleanField(default=False, help_text='Collapse this video description with Read more.'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,35 @@
|
||||
# Generated by Django 5.2.16 on 2026-10-12 11:20
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pages', '0024_aboutsection_read_more_subtitle_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='blogpostpartner',
|
||||
options={'ordering': [models.Case(models.When(role__iexact='organizer', then=models.Value(0)), models.When(role__iexact='collaborator', then=models.Value(1)), default=models.Value(2), output_field=models.IntegerField()), 'order', 'pk'], 'verbose_name': 'Article organizer or collaborator', 'verbose_name_plural': 'Article organizers and collaborators'},
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='blogpost',
|
||||
name='partners_eyebrow',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='blogpost',
|
||||
name='partners_title',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogpostpartner',
|
||||
name='order',
|
||||
field=models.PositiveIntegerField(default=0, help_text='Smaller numbers appear first. Organizers appear before collaborators, then custom roles.', verbose_name='Display order'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='blogpostpartner',
|
||||
name='role',
|
||||
field=models.CharField(default='Collaborator', help_text='Type Organizer, Collaborator, or any other role name you want to display.', max_length=100, verbose_name='Role / group'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 5.2.16 on 2026-10-12 11:20
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pages', '0025_alter_blogpostpartner_options_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='blogpostpartner',
|
||||
options={'ordering': [models.Case(models.When(role__iexact='organizer', then=models.Value(0)), models.When(role__iexact='collaborator', then=models.Value(1)), default=models.Value(2), output_field=models.IntegerField()), 'order', 'pk'], 'verbose_name': 'Article person', 'verbose_name_plural': 'Article people'},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 5.2.16 on 2026-10-14 15:01
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('pages', '0026_alter_blogpostpartner_options'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='aboutsectionitem',
|
||||
name='role',
|
||||
field=models.CharField(blank=True, help_text='For People sections: Organizer, Collaborator, or any custom role name.', max_length=100, verbose_name='Role / group'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='aboutsection',
|
||||
name='section_type',
|
||||
field=models.CharField(choices=[('hero', 'Hero'), ('intro', 'Intro Card'), ('grid', 'Grid Cards'), ('history', 'History Block'), ('custom', 'Custom Content'), ('supporters', 'Supporters'), ('people', 'People / Organizers & Collaborators'), ('video', 'Video')], default='custom', max_length=30),
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user