feat: add direct-save CMS and About archive
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
"""Add editable Home actions, About team/gallery content, and the footer badge."""
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
import apps.content.current
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [("content", "0005_seed_current_website_copy")]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="sitecontent",
|
||||
name="enamad_image",
|
||||
field=models.ImageField(blank=True, upload_to=apps.content.current.content_upload_path, verbose_name="eNAMAD certificate image"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="sitecontent",
|
||||
name="enamad_image_alt",
|
||||
field=models.CharField(blank=True, max_length=180, verbose_name="eNAMAD image description"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="sitecontent",
|
||||
name="enamad_url",
|
||||
field=models.URLField(blank=True, verbose_name="eNAMAD verification URL"),
|
||||
),
|
||||
migrations.AddField(model_name="homecontent", name="hero_action_url", field=models.CharField(blank=True, max_length=500)),
|
||||
migrations.AddField(model_name="homecontent", name="hero_secondary_action_label", field=models.CharField(blank=True, max_length=40)),
|
||||
migrations.AddField(model_name="homecontent", name="hero_secondary_action_url", field=models.CharField(blank=True, max_length=500)),
|
||||
migrations.AddField(model_name="homecontent", name="featured_events_url", field=models.CharField(blank=True, max_length=500)),
|
||||
migrations.AddField(model_name="homecontent", name="featured_event_action_label", field=models.CharField(blank=True, max_length=40)),
|
||||
migrations.AddField(model_name="homecontent", name="featured_posts_url", field=models.CharField(blank=True, max_length=500)),
|
||||
migrations.AddField(model_name="homecontent", name="featured_post_action_label", field=models.CharField(blank=True, max_length=40)),
|
||||
migrations.AddField(model_name="homecontent", name="participation_action_url", field=models.CharField(blank=True, max_length=500)),
|
||||
migrations.AddField(model_name="homecontent", name="participation_secondary_action_label", field=models.CharField(blank=True, max_length=40)),
|
||||
migrations.AddField(model_name="homecontent", name="participation_secondary_action_url", field=models.CharField(blank=True, max_length=500)),
|
||||
migrations.AddField(model_name="aboutcontent", name="members_heading", field=models.CharField(blank=True, max_length=120)),
|
||||
migrations.AddField(model_name="aboutcontent", name="members_intro", field=models.CharField(blank=True, max_length=300)),
|
||||
migrations.AddField(model_name="aboutcontent", name="gallery_heading", field=models.CharField(blank=True, max_length=120)),
|
||||
migrations.AddField(model_name="aboutcontent", name="gallery_intro", field=models.CharField(blank=True, max_length=300)),
|
||||
migrations.AddField(model_name="aboutcontent", name="past_events_heading", field=models.CharField(blank=True, max_length=120)),
|
||||
migrations.CreateModel(
|
||||
name="AboutMember",
|
||||
fields=[
|
||||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
||||
("name", models.CharField(max_length=120)),
|
||||
("role", models.CharField(max_length=120)),
|
||||
("entry_year", models.CharField(max_length=16, verbose_name="Year joined the association")),
|
||||
("bio", models.CharField(blank=True, max_length=500)),
|
||||
("photo", models.ImageField(blank=True, upload_to=apps.content.current.content_upload_path)),
|
||||
("photo_alt", models.CharField(blank=True, max_length=180)),
|
||||
("position", models.PositiveSmallIntegerField(default=0)),
|
||||
("about", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="members", to="content.aboutcontent")),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Association member",
|
||||
"verbose_name_plural": "Association members",
|
||||
"ordering": ["position", "pk"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AboutGalleryImage",
|
||||
fields=[
|
||||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
||||
("image", models.ImageField(upload_to=apps.content.current.content_upload_path)),
|
||||
("image_alt", models.CharField(max_length=180)),
|
||||
("caption", models.CharField(blank=True, max_length=180)),
|
||||
("position", models.PositiveSmallIntegerField(default=0)),
|
||||
("about", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="gallery_images", to="content.aboutcontent")),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "About page gallery image",
|
||||
"verbose_name_plural": "About page gallery images",
|
||||
"ordering": ["position", "pk"],
|
||||
},
|
||||
),
|
||||
]
|
||||
113
apps/content/migrations/0007_about_story_archive.py
Normal file
113
apps/content/migrations/0007_about_story_archive.py
Normal file
@@ -0,0 +1,113 @@
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("content", "0006_home_actions_about_members_gallery_enamad"),
|
||||
("events", "0014_remove_registration_cancellation_email_sent_at_and_more"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="vision_heading",
|
||||
field=models.CharField(blank=True, max_length=120),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="vision_body",
|
||||
field=models.TextField(blank=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="history_heading",
|
||||
field=models.CharField(blank=True, max_length=120),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="audience_heading",
|
||||
field=models.CharField(blank=True, max_length=120),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="year_events_heading",
|
||||
field=models.CharField(blank=True, max_length=120),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="cta_heading",
|
||||
field=models.CharField(blank=True, max_length=120),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="cta_body",
|
||||
field=models.CharField(blank=True, max_length=300),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="cta_action_label",
|
||||
field=models.CharField(blank=True, max_length=40),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutcontent",
|
||||
name="cta_action_url",
|
||||
field=models.CharField(blank=True, max_length=500),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AboutAudience",
|
||||
fields=[
|
||||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
||||
("title", models.CharField(max_length=120)),
|
||||
("text", models.CharField(max_length=300)),
|
||||
("icon", models.CharField(choices=[("students", "Students"), ("alumni", "Alumni"), ("faculty", "Faculty and researchers"), ("partners", "Industry and community partners")], default="students", max_length=20)),
|
||||
("position", models.PositiveSmallIntegerField(default=0)),
|
||||
("about", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="audiences", to="content.aboutcontent")),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "About page audience",
|
||||
"verbose_name_plural": "About page audiences",
|
||||
"ordering": ["position", "pk"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AboutMilestone",
|
||||
fields=[
|
||||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
||||
("year_label", models.CharField(max_length=32, verbose_name="Year")),
|
||||
("title", models.CharField(max_length=120)),
|
||||
("description", models.CharField(max_length=500)),
|
||||
("position", models.PositiveSmallIntegerField(default=0)),
|
||||
("about", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="milestones", to="content.aboutcontent")),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Association history milestone",
|
||||
"verbose_name_plural": "Association history milestones",
|
||||
"ordering": ["position", "pk"],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="AboutYear",
|
||||
fields=[
|
||||
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
||||
("year_label", models.CharField(max_length=32, verbose_name="Academic year")),
|
||||
("position", models.PositiveSmallIntegerField(default=0, help_text="Order years from oldest to newest; the last year is selected by default on the page.")),
|
||||
("about", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="years", to="content.aboutcontent")),
|
||||
("events", models.ManyToManyField(blank=True, help_text="Choose past, published or completed events. Draft, cancelled, and upcoming events are not shown.", related_name="about_year_highlights", to="events.event")),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "Association year",
|
||||
"verbose_name_plural": "Association years",
|
||||
"ordering": ["position", "pk"],
|
||||
},
|
||||
),
|
||||
migrations.AddConstraint(
|
||||
model_name="aboutyear",
|
||||
constraint=models.UniqueConstraint(fields=("about", "year_label"), name="content_about_year_label_unique"),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="aboutmember",
|
||||
name="year_group",
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="members", to="content.aboutyear"),
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user