50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from rest_framework import serializers
|
|
from wagtail.models import Page
|
|
|
|
from website.blog.models import BlogPostPage
|
|
|
|
|
|
class PageLinkSerializer(serializers.ModelSerializer):
|
|
full_url = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Page
|
|
fields = read_only_fields = ["full_url", "title"]
|
|
|
|
def get_full_url(self, page: Page) -> str:
|
|
return page.get_full_url(request=self.context["request"])
|
|
|
|
|
|
class LMOTFYSerializer(serializers.ModelSerializer):
|
|
full_url = serializers.SerializerMethodField()
|
|
image = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = BlogPostPage
|
|
fields = read_only_fields = ["full_url", "title", "summary", "image", "date"]
|
|
|
|
def get_full_url(self, page: BlogPostPage) -> str:
|
|
return page.get_full_url(request=self.context["request"])
|
|
|
|
def get_image(self, page: BlogPostPage) -> str | None:
|
|
image_url = page.get_meta_image_url(request=self.context["request"])
|
|
|
|
if not image_url:
|
|
return None
|
|
|
|
if image_url[0] == "/":
|
|
return self.context["request"].build_absolute_uri(image_url)
|
|
|
|
return image_url
|
|
|
|
|
|
class LatestPostSerializer(serializers.ModelSerializer):
|
|
full_url = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = BlogPostPage
|
|
fields = read_only_fields = ["full_url", "title", "date"]
|
|
|
|
def get_full_url(self, page: Page) -> str:
|
|
return page.get_full_url(request=self.context["request"])
|