website/website/home/models.py

54 lines
1.6 KiB
Python
Raw Normal View History

2022-06-12 21:08:11 +01:00
from django.db import models
2022-07-25 20:02:54 +01:00
from django.http.request import HttpRequest
2022-06-12 21:08:11 +01:00
from wagtail.admin.panels import FieldPanel
from wagtail.images import get_image_model_string
2022-08-19 16:56:20 +01:00
from wagtail.images.models import Image
from wagtailmetadata.models import WagtailImageMetadataMixin
2022-06-12 21:08:11 +01:00
from website.common.models import BasePage
2022-08-28 20:22:55 +01:00
from website.contrib.singleton_url.utils import SingletonURLCache
2022-06-09 08:36:29 +01:00
2022-06-12 15:17:28 +01:00
2022-08-19 16:56:20 +01:00
class HomePage(BasePage, WagtailImageMetadataMixin):
2022-06-14 20:57:50 +01:00
max_count = 1
2022-06-12 21:08:11 +01:00
heading = models.CharField(max_length=128, blank=True)
image = models.ForeignKey(
get_image_model_string(), null=True, on_delete=models.SET_NULL
)
2022-06-12 21:08:11 +01:00
content_panels = BasePage.content_panels + [
FieldPanel("heading"),
FieldPanel("image"),
]
2022-07-25 20:02:54 +01:00
2022-08-19 16:56:20 +01:00
def get_meta_url(self) -> str:
return self.full_url
def get_meta_image(self) -> Image | None:
return self.image
def get_meta_title(self) -> str:
return self.seo_title or self.title
def get_meta_description(self) -> str:
return self.search_description
def get_object_title(self) -> str:
return ""
2022-07-25 20:02:54 +01:00
def get_context(self, request: HttpRequest) -> dict:
from website.blog.models import BlogPostPage
from website.search.models import SearchPage
2022-07-25 20:02:54 +01:00
context = super().get_context(request)
context["latest_blog_post"] = (
2022-08-28 16:51:27 +01:00
BlogPostPage.objects.live()
.public()
.defer_streamfields()
.order_by("-date")
.first()
)
2022-08-28 20:22:55 +01:00
context["search_page_url"] = SingletonURLCache.get_url(SearchPage)
2022-07-25 20:02:54 +01:00
return context