Untitled
unknown
plain_text
a year ago
7.7 kB
6
Indexable
"""Home models.""" from django.db.models import SET_NULL, CharField, ForeignKey from django.utils.translation import gettext_lazy as _ from wagtail.admin.panels import ( FieldPanel, FieldRowPanel, MultiFieldPanel, PageChooserPanel, ) from wagtail.blocks import ( BooleanBlock, CharBlock, IntegerBlock, PageChooserBlock, StructBlock, ) from wagtail.fields import StreamField from wagtail.models import Page from wagtail_color_panel.edit_handlers import NativeColorPanel from common import AUTHORED_PIECE_INDEX_SUBPAGE_TYPES, AUTHORED_PIECE_TYPES from common.managers import CommonManager from common.models import ( AbstractSEOPage, BannerFieldsModel, FeaturedOpinionFieldModel, ) from figures.models import FigureIndexPage, FigurePage from opinions.models import OpinionIndexPage, OpinionPage class HomePage(BannerFieldsModel, FeaturedOpinionFieldModel, AbstractSEOPage): """The homepage.""" newsletter_description = CharField( verbose_name=_("descrizione newsletter"), blank=True ) opinions_description = CharField(verbose_name=_("descrizione opinioni"), blank=True) banner_image = ForeignKey( "common.CustomImage", null=True, blank=True, on_delete=SET_NULL, related_name="+", verbose_name=_("immagine"), ) figure_section_title = CharField(verbose_name=_("titolo widget"), blank=True) figure_section_description = CharField( verbose_name=_("descrizione widget"), blank=True ) featured_authored_piece = ForeignKey( "wagtailcore.Page", verbose_name=_("articolo laterale"), null=True, blank=True, on_delete=SET_NULL, related_name="+", ) figure_taxonomy = ForeignKey( "taxonomies.FiguresTaxonomyPage", verbose_name=_("tassonomia Numeri"), null=True, blank=True, on_delete=SET_NULL, related_name="+", ) figure_widget_chart = StreamField( [ ( "figure_bar", StructBlock( [ ("bar_label", CharBlock(label=_("Titolo"), blank=True)), ( "is_bar_highlighted", BooleanBlock( label=_("In evidenza"), default=False, required=False ), ), ( "bar_length", IntegerBlock( label=_("Lunghezza"), max_value=5, min_value=1, default=1, ), ), ], label=_("Segmento numero"), ), ), ], verbose_name=_("chart numeri"), blank=True, null=True, ) authored_pieces_board = StreamField( [ ( "main_article", PageChooserBlock( page_type=AUTHORED_PIECE_INDEX_SUBPAGE_TYPES, label=_("Articolo principale"), ), ), ( "secondary_article", PageChooserBlock( page_type=AUTHORED_PIECE_INDEX_SUBPAGE_TYPES, label=_("Articolo secondario"), ), ), ( "bottom_article", PageChooserBlock( page_type=AUTHORED_PIECE_INDEX_SUBPAGE_TYPES, label=_("Articolo di chiusura"), ), ), ( "side_article", PageChooserBlock( page_type=AUTHORED_PIECE_INDEX_SUBPAGE_TYPES, label=_("Articolo laterale"), ), ), ], block_counts={ "main_article": {"max_num": 1}, "secondary_article": {"max_num": 1}, "bottom_article": {"max_num": 2}, "side_article": {"max_num": 4}, }, verbose_name=_("bacheca articoli"), blank=True, null=True, ) objects = CommonManager() content_panels = Page.content_panels + [ FieldPanel("newsletter_description"), FieldPanel("authored_pieces_board"), FieldPanel("opinions_description"), FieldPanel("featured_opinion"), MultiFieldPanel( [ FieldPanel("figure_section_title"), FieldPanel("figure_section_description"), FieldPanel("figure_taxonomy"), FieldPanel("figure_widget_chart"), PageChooserPanel( "featured_authored_piece", page_type=[ "articles.ArticlePage", "opinions.OpinionPage", "dossiers.DossierPage", ], ), ], heading=_("Sezione Numeri"), ), MultiFieldPanel( [ FieldPanel("banner_image"), FieldPanel("banner_title"), FieldRowPanel( [ FieldPanel("banner_publication_issue"), FieldPanel("banner_publication_year"), ] ), FieldPanel("banner_description"), FieldRowPanel( [ FieldPanel("banner_primary_button_label"), FieldPanel("banner_primary_button_page"), ] ), FieldRowPanel( [ FieldPanel("banner_secondary_button_label"), FieldPanel("banner_secondary_button_page"), ] ), FieldRowPanel( [ NativeColorPanel("banner_background_color"), NativeColorPanel("banner_text_color"), NativeColorPanel("banner_button_background_color"), ] ), ], heading=_("Banner"), ), ] class Meta: """The model options.""" verbose_name = "homepage" verbose_name_plural = "homepage" def get_context(self, request, *args, **kwargs): """Return context.""" figures = ( FigurePage.objects.live() .specific() .select_related("taxonomies") .filter(taxonomies__in=[self.figure_taxonomy]) .order_by("-first_published_at") ) return { **super().get_context(request, *args, **kwargs), "opinions": OpinionPage.objects.live().order_by("-first_published_at"), "featured_opinion": self.featured_opinion or OpinionPage.objects.live().order_by("-first_published_at").first(), "opinion_index_page": OpinionIndexPage.objects.in_menu().first(), "authored_pieces": sorted( self._meta.model.objects.get_live_pages_for_types( *AUTHORED_PIECE_TYPES )[:11], key=lambda x: not x.is_featured_news_in_homepage, ), "figures_chart": zip( figures, self.figure_widget_chart.raw_data, strict=False ), "figure_index_page": FigureIndexPage.objects.in_menu().first(), }
Editor is loading...
Leave a Comment