From 01775e634bdd2ebb49a13b85ff50f67afb889976 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <tomas@imaniti.org>
Date: Tue, 11 Jun 2024 23:10:15 +0200
Subject: [PATCH] add automatic redirects, fix menu iterator (again)

---
 district/models.py    | 21 +++++++++++++++------
 shared/models/main.py |  9 +++++++--
 2 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/district/models.py b/district/models.py
index 7c026ad5..ef3a38e4 100644
--- a/district/models.py
+++ b/district/models.py
@@ -1,5 +1,6 @@
 import json
 
+from django.http import HttpResponseRedirect
 from django.core.cache import cache
 from django.core.exceptions import ValidationError
 from django.db import models
@@ -1099,25 +1100,33 @@ class DistrictGeoFeatureDetailPage(
 # Legacy models required for migrations
 
 
-class DistrictElectionRootPage(Page):
+class LegacyProgramPageMixin(Page):
+    def serve(self, request, *args, **kwargs):
+        return HttpResponseRedirect("/programy/")
+
+    class Meta:
+        abstract = True
+
+
+class DistrictElectionRootPage(LegacyProgramPageMixin, Page):
     pass
 
 
-class DistrictProgramPage(Page):
+class DistrictProgramPage(LegacyProgramPageMixin, Page):
     pass
 
 
-class DistrictInteractiveProgramPage(Page):
+class DistrictInteractiveProgramPage(LegacyProgramPageMixin, Page):
     pass
 
 
-class DistrictElectionCampaignPage(Page):
+class DistrictElectionCampaignPage(LegacyProgramPageMixin, Page):
     pass
 
 
-class DistrictElectionProgramPage(Page):
+class DistrictElectionProgramPage(LegacyProgramPageMixin, Page):
     pass
 
 
-class DistrictPostElectionStrategyPage(Page):
+class DistrictPostElectionStrategyPage(LegacyProgramPageMixin, Page):
     pass
diff --git a/shared/models/main.py b/shared/models/main.py
index c708723b..2d1a58ff 100644
--- a/shared/models/main.py
+++ b/shared/models/main.py
@@ -250,7 +250,11 @@ class PageInMenuMixin(Page):
         menu_iterator = (
             instance.root_page.menu
             if hasattr(instance, "root_page")
-            else instance.menu
+            else (
+                instance.menu
+                if hasattr(instance, "menu")
+                else []
+            )
         )
 
         for menu in menu_iterator:
@@ -268,9 +272,10 @@ class PageInMenuMixin(Page):
                     if item["page"].id == instance.id:
                         return menu.value["title"]
 
-        parent = instance.get_parent().specific
+        parent = instance.get_parent()
 
         if parent:
+            parent = parent.specific
             return self.get_menu_title(parent)
 
         return self.title
-- 
GitLab