iamkonstantin/home/models.py

68 lines
No EOL
1.9 KiB
Python

from django.db import models
from wagtail.models import Page
from wagtail.fields import RichTextField, StreamField
from wagtail.admin.panels import FieldPanel, MultiFieldPanel
from wagtailseo.models import SeoMixin, SeoType
from blog.models import BlogPage
from .blocks import HomeContentBlock
class HomePage(SeoMixin, Page):
image = models.ForeignKey(
"wagtailimages.Image",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="+",
help_text="Homepage image",
)
hero_text = models.CharField(
blank=True,
max_length=255, help_text="Write an introduction for the site"
)
hero_cta = models.CharField(
blank=True,
verbose_name="Hero CTA",
max_length=255,
help_text="Text to display on Call to Action",
)
hero_cta_link = models.ForeignKey(
"wagtailcore.Page",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="+",
verbose_name="Hero CTA link",
help_text="Choose a page to link to for the Call to Action",
)
body = StreamField(
HomeContentBlock(),
blank=True,
use_json_field=True,
help_text="Write anything",
)
content_panels = Page.content_panels + [
MultiFieldPanel(
[
FieldPanel("image"),
FieldPanel("hero_text"),
FieldPanel("hero_cta"),
FieldPanel("hero_cta_link"),
],
heading="Hero section",
),
FieldPanel('body'),
]
promote_panels = SeoMixin.seo_panels
seo_content_type = SeoType.WEBSITE
def get_context(self, request, *args, **kwargs):
context = super().get_context(request)
# retrieve the last 3 blogposts
recent_blog_items = BlogPage.objects.live().order_by('-first_published_at')[:3]
context['recent_blog_items'] = recent_blog_items
return context