diff --git a/apps/core/factories.py b/apps/core/factories.py index df31d7cc..5a6266bf 100644 --- a/apps/core/factories.py +++ b/apps/core/factories.py @@ -8,6 +8,7 @@ from wagtail.core.models import Locale, Page, Site from apps.core.models import ContentPage, HomePage +from apps.core.models.content import SectionPage fake = Faker() @@ -75,3 +76,8 @@ def first_published_at(self): @factory.lazy_attribute def parent(self): return HomePageFactory() + + +class SectionPageFactory(ContentPageFactory): + class Meta: + model = SectionPage diff --git a/apps/core/management/commands/buildfixtures.py b/apps/core/management/commands/buildfixtures.py index dfc35f33..7306a852 100644 --- a/apps/core/management/commands/buildfixtures.py +++ b/apps/core/management/commands/buildfixtures.py @@ -9,7 +9,7 @@ from wagtail.images import get_image_model from wagtail.models import Collection, Locale, Page -from apps.core.factories import ContentPageFactory, HomePageFactory +from apps.core.factories import ContentPageFactory, HomePageFactory, SectionPageFactory fake = Faker() @@ -94,7 +94,7 @@ def create_content_pages(self): ], ], ]: - page = ContentPageFactory( + page = SectionPageFactory( parent=self.home, title=title, slug=slugify(title), diff --git a/apps/core/migrations/0010_sectionpage.py b/apps/core/migrations/0010_sectionpage.py new file mode 100644 index 00000000..d673160f --- /dev/null +++ b/apps/core/migrations/0010_sectionpage.py @@ -0,0 +1,34 @@ +# Generated by Django 4.1.2 on 2022-11-09 15:19 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("core", "0009_default_homepage_introduction"), + ] + + operations = [ + migrations.CreateModel( + name="SectionPage", + fields=[ + ( + "contentpage_ptr", + models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to="core.contentpage", + ), + ), + ], + options={ + "abstract": False, + }, + bases=("core.contentpage",), + ), + ] diff --git a/apps/core/models/content.py b/apps/core/models/content.py index 1008dc64..a49ddfd3 100644 --- a/apps/core/models/content.py +++ b/apps/core/models/content.py @@ -51,7 +51,7 @@ def get_context(self, request, *args, **kwargs): ) return context - def serve(self, request): + def serve(self, request, *args, **kwargs): if request.method == "POST": data = json.loads(request.body) if "pk" in data: @@ -69,8 +69,14 @@ def serve(self, request): return HttpResponse(json.dumps(data)) else: - return super().serve(request) + return super().serve(request, *args, **kwargs) def save_revision(self, *args, **kwargs): self.table_of_contents = create_table_of_contents(self.body) return super().save_revision(*args, **kwargs) + + +class SectionPage(ContentPage): + parent_page_types = ["core.HomePage"] + + # Distinct section page features here. diff --git a/apps/core/models/home.py b/apps/core/models/home.py index 9768d66d..1a0b1da7 100644 --- a/apps/core/models/home.py +++ b/apps/core/models/home.py @@ -7,7 +7,7 @@ class HomePage(Page): - subpage_types = ["core.ContentPage"] + subpage_types = ["core.SectionPage", "core.ContentPage"] max_count = 1 introduction = models.TextField(blank=True) diff --git a/apps/core/templates/core/section_page.html b/apps/core/templates/core/section_page.html new file mode 100644 index 00000000..9af7c29b --- /dev/null +++ b/apps/core/templates/core/section_page.html @@ -0,0 +1 @@ +{% extends "core/content_page.html" %} diff --git a/apps/search/views.py b/apps/search/views.py index 9c79399c..f5bcacaf 100644 --- a/apps/search/views.py +++ b/apps/search/views.py @@ -51,11 +51,12 @@ class Meta: fields = ["id", "title", "search_description", "full_url", "parent_section"] def get_parent_section(self, page): + # We might update this to search for the first SectionPage ancestors = page.get_ancestors() if len(ancestors) >= 3: return ancestors[2].title else: - return _("Home") + return _("Home") # Shouldn't this be None? OR a dash? @api_view(["GET"])