diff --git a/district/models.py b/district/models.py index c006cba7b4e1c99088219d88e0c4c8f30c357dc6..442264670e56ef3ec3388deb4f7ea1fc05c3aa2a 100644 --- a/district/models.py +++ b/district/models.py @@ -70,11 +70,13 @@ CONTENT_BLOCKS = DEFAULT_CONTENT_BLOCKS + [ class DistrictHomePage( + RoutablePageMixin, MenuMixin, ExtendedMetadataHomePageMixin, MetadataPageMixin, CalendarMixin, FooterMixin, + ArticlesMixin, Page, ): ### FIELDS @@ -235,6 +237,7 @@ class DistrictHomePage( FieldPanel("subheader"), FieldPanel("content"), FieldPanel("articles_title"), + FieldPanel("shared_tags"), FieldPanel("election_countdown_datetime"), FieldPanel("show_calendar_on_hp"), ] @@ -330,6 +333,10 @@ class DistrictHomePage( class Meta: verbose_name = "Oblastní sdružení" + @route(r"^sdilene/$", name="shared") + def shared(self, request): + return self.setup_article_page_context(request) + def _first_subpage_of_type(self, page_type) -> Page or None: try: return self.get_descendants().type(page_type).live().specific()[0] @@ -338,13 +345,9 @@ class DistrictHomePage( @property def articles(self): - return ( - self.get_descendants() - .type(DistrictArticlePage) - .live() - .specific() - .order_by("-districtarticlepage__date")[:6] - ) + return self.append_all_shared_articles( + DistrictArticlePage.objects.descendant_of(self) + )[:6] @property def articles_page(self): @@ -616,9 +619,7 @@ class DistrictArticlesPage( """ return self.search_tags_by_article_id( site_article_ids, - custom_query_to_values=lambda query: query.annotate( - count=models.Count("slug") - ) + tags_model_query=lambda query: query.annotate(count=models.Count("slug")) .order_by("slug") .values("name", "slug", "count"), ) diff --git a/shared/models.py b/shared/models.py index 086796e2ecbaa830448b5c7bf1f2277104d562b1..2171001b36303c6f6506aee4a623a8208cefc424 100644 --- a/shared/models.py +++ b/shared/models.py @@ -298,16 +298,11 @@ class ArticlesMixin(models.Model): content_panels = Page.content_panels + [FieldPanel("shared_tags")] def determine_page_type(self): - DistrictArticlesPage = apps.get_model(app_label="district.DistrictArticlesPage") - UniwebArticlesIndexPage = apps.get_model( - app_label="uniweb.UniwebArticlesIndexPage" - ) - MainArticlesPage = apps.get_model(app_label="main.MainArticlesPage") - if isinstance(self, DistrictArticlesPage): + if self._meta.app_label == "district": return SharedArticlesPageType.DISTRICT - elif isinstance(self, UniwebArticlesIndexPage): + elif self._meta.app_label == "uniweb": return SharedArticlesPageType.UNIWEB - elif isinstance(self, MainArticlesPage): + elif self._meta.app_label == "main": return SharedArticlesPageType.MAIN def append_all_shared_articles_query( @@ -534,7 +529,7 @@ class ArticlesMixin(models.Model): return self.get_article_page_by_slug(slug).serve(request) def search_tags_by_article_id( - self, site_article_ids: list, additional_query=None, custom_query_to_values=None + self, site_article_ids: list, additional_query=None, tags_model_query=None ): DistrictArticleTag = apps.get_model(app_label="district.DistrictArticleTag") UniwebArticleTag = apps.get_model(app_label="uniweb.UniwebArticleTag") @@ -557,11 +552,11 @@ class ArticlesMixin(models.Model): union = district_tags.union(uniweb_tags).union(main_tags) - union = union.values_list("id") + union = union.values_list("tag_id", flat=True) tag_query = Tag.objects.filter(id__in=union) - if custom_query_to_values is not None: - tag_query = custom_query_to_values(tag_query) + if tags_model_query is not None: + tag_query = tags_model_query(tag_query) return tag_query