diff --git a/district/migrations/0122_remove_districthomepage_shared_tags.py b/district/migrations/0122_remove_districthomepage_shared_tags.py new file mode 100644 index 0000000000000000000000000000000000000000..0c45180c73f618f34808b8a720e26e1d38629497 --- /dev/null +++ b/district/migrations/0122_remove_districthomepage_shared_tags.py @@ -0,0 +1,16 @@ +# Generated by Django 4.1.8 on 2023-08-16 12:30 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("district", "0121_merge_20230816_1107"), + ] + + operations = [ + migrations.RemoveField( + model_name="districthomepage", + name="shared_tags", + ), + ] diff --git a/district/models.py b/district/models.py index 505d94255d0642086253c5095677643668fc9440..9963cb3609c29dd11c23935adc940c5b5d14c344 100644 --- a/district/models.py +++ b/district/models.py @@ -49,6 +49,7 @@ from shared.const import RICH_TEXT_DEFAULT_FEATURES from shared.models import ( ArticleMixin, ArticlesMixin, + ArticlesPageMixin, ExtendedMetadataHomePageMixin, ExtendedMetadataPageMixin, FooterMixin, @@ -246,7 +247,6 @@ class DistrictHomePage( FieldPanel("subheader"), FieldPanel("content"), FieldPanel("articles_title"), - FieldPanel("shared_tags"), FieldPanel("election_countdown_datetime"), FieldPanel("show_calendar_on_hp"), ] @@ -507,7 +507,7 @@ class DistrictArticlesPage( ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, - ArticlesMixin, + ArticlesPageMixin, Page, ): ### FIELDS @@ -519,7 +519,7 @@ class DistrictArticlesPage( ### PANELS - content_panels = ArticlesMixin.content_panels + [ + content_panels = ArticlesPageMixin.content_panels + [ FieldPanel("max_items"), ] diff --git a/main/migrations/0061_remove_mainhomepage_shared_tags.py b/main/migrations/0061_remove_mainhomepage_shared_tags.py new file mode 100644 index 0000000000000000000000000000000000000000..e5b4a6bf9dff565029e58b7e13bd6d54aa4d59ac --- /dev/null +++ b/main/migrations/0061_remove_mainhomepage_shared_tags.py @@ -0,0 +1,16 @@ +# Generated by Django 4.1.8 on 2023-08-16 12:30 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("main", "0060_merge_20230816_1107"), + ] + + operations = [ + migrations.RemoveField( + model_name="mainhomepage", + name="shared_tags", + ), + ] diff --git a/main/models.py b/main/models.py index 8349b2918a755902b7300482a5c02d0c11062bbb..3efb0ba13bd20a062921d3c45c59688a0c45430b 100644 --- a/main/models.py +++ b/main/models.py @@ -32,6 +32,7 @@ from shared.forms import SubscribeForm from shared.models import ( # MenuMixin, ArticleMixin, ArticlesMixin, + ArticlesPageMixin, ExtendedMetadataHomePageMixin, ExtendedMetadataPageMixin, SharedTaggedMainArticle, @@ -143,7 +144,6 @@ class MainHomePage( content_panels = Page.content_panels + [ FieldPanel("content"), - *ArticlesMixin.content_panels, FieldPanel("footer_other_links"), FieldPanel("footer_person_list"), ] @@ -250,7 +250,12 @@ class MainHomePage( @cached_property def newsletter_subscribe_url(self): - return self.url + self.reverse_subpage("newsletter_subscribe") + newsletter_subscribe = self.reverse_subpage("newsletter_subscribe") + return ( + self.url + newsletter_subscribe + if self.url is not None + else newsletter_subscribe + ) # preview fix @property def articles_page(self): @@ -314,7 +319,7 @@ class MainArticlesPage( ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, - ArticlesMixin, + ArticlesPageMixin, Page, ): perex = models.TextField() @@ -349,7 +354,10 @@ class MainArticlesPage( subpage_types = ["main.MainArticlePage"] ### PANELS - content_panels = ArticlesMixin.content_panels + [FieldPanel("perex")] + content_panels = Page.content_panels + [ + FieldPanel("perex"), + FieldPanel("shared_tags"), + ] promote_panels = make_promote_panels() ### EDIT HANDLERS @@ -487,7 +495,8 @@ class MainArticlesPage( @cached_property def search_url(self): - return self.url + self.reverse_subpage("search") + reverse_url = self.reverse_subpage("search") + return self.url + reverse_url if self.url is not None else reverse_url @route(r"^sdilene/$", name="shared") def shared(self, request): diff --git a/shared/models.py b/shared/models.py index 119fbf4af3c5a44505ecbca4bcfbf2a782085425..276a935bbaeeb0e34155b236682cb8fff3d69600 100644 --- a/shared/models.py +++ b/shared/models.py @@ -349,15 +349,16 @@ class SharedArticlesPageType(Enum): MAIN = "main" -class ArticlesMixin(models.Model): - shared_tags = ParentalManyToManyField( - "shared.SharedTag", - verbose_name="Výběr tagů pro články sdílené mezi sítěmi", - help_text="Pro výběr jednoho tagu klikněte na tag a uložte nebo publikujte stránku. Pro výběr více tagů využijte podržte Ctrl a vyberte příslušné tagy.", - blank=True, - ) - - content_panels = Page.content_panels + [FieldPanel("shared_tags")] +class ArticlesMixin: + def get_shared_tags(self): + """ + Relies on property articles_page being present within the child page, returns shared tags field + """ + return ( + self.articles_page.shared_tags + if self.articles_page is not None + else SharedTag.objects.none() + ) def merge_dict(self, aDict: dict, bDict: dict): """ @@ -417,7 +418,9 @@ class ArticlesMixin(models.Model): filtered_query = ( query.filter( ~Q(page_ptr_id__in=Subquery(original_query.values("page_ptr_id"))), - shared_tags__slug__in=self.shared_tags.values_list("slug", flat=True), + shared_tags__slug__in=self.get_shared_tags().values_list( + "slug", flat=True + ), ) if isinstance(original_query, models.QuerySet) else ( @@ -427,13 +430,13 @@ class ArticlesMixin(models.Model): map(lambda article: article.pk, original_query) ) ), - shared_tags__slug__in=self.shared_tags.values_list( + shared_tags__slug__in=self.get_shared_tags().values_list( "slug", flat=True ), ) if original_query is not None else query.filter( - shared_tags__slug__in=self.shared_tags.values_list( + shared_tags__slug__in=self.get_shared_tags().values_list( "slug", flat=True ), ) @@ -568,7 +571,7 @@ class ArticlesMixin(models.Model): main_by_slug = create_query_by_slug(main_article_query) shared_field = Value( - self.page_ptr.id, + self.page_ptr.id if hasattr(self, "page_ptr") else None, # preview fix output_field=models.ForeignKey( Page, null=True, blank=True, related_name="+", on_delete=models.PROTECT ), @@ -626,6 +629,10 @@ class ArticlesMixin(models.Model): union_shared_from_id=empty_shared_field, union_shared_type=empty_shared_type, ) + + if self.get_shared_tags().count() == 0: + return prepared_query.order_by("-union_date") + return ( prepared_query.union(main_by_values) .union(uniweb_by_values) @@ -881,3 +888,23 @@ class ArticlesMixin(models.Model): class Meta: abstract = True + + +class ArticlesPageMixin(ArticlesMixin, models.Model): + def get_shared_tags(self): + """ + Overrides get_shared_tags from ArticlesMixin, returns shared tags + """ + return self.shared_tags + + shared_tags = ParentalManyToManyField( + "shared.SharedTag", + verbose_name="Výběr tagů pro články sdílené mezi sítěmi", + help_text="Pro výběr jednoho tagu klikněte na tag a uložte nebo publikujte stránku. Pro výběr více tagů využijte podržte Ctrl a vyberte příslušné tagy.", + blank=True, + ) + + content_panels = Page.content_panels + [FieldPanel("shared_tags")] + + class Meta: + abstract = True diff --git a/uniweb/models.py b/uniweb/models.py index de3b627f40126a8e0eaada449c5fa9813cdff461..ffdeee74e1198ce86d14fbdcf491ba446a95171e 100644 --- a/uniweb/models.py +++ b/uniweb/models.py @@ -31,7 +31,7 @@ from shared.blocks import ChartBlock, NewsletterSubscriptionBlock from shared.const import RICH_TEXT_DEFAULT_FEATURES from shared.models import ( ArticleMixin, - ArticlesMixin, + ArticlesPageMixin, ExtendedMetadataHomePageMixin, ExtendedMetadataPageMixin, FooterMixin, @@ -517,13 +517,13 @@ class UniwebArticlesIndexPage( ExtendedMetadataPageMixin, SubpageMixin, MetadataPageMixin, - ArticlesMixin, + ArticlesPageMixin, ): ### FIELDS ### PANELS - content_panels = ArticlesMixin.content_panels + content_panels = ArticlesPageMixin.content_panels promote_panels = make_promote_panels()