Django Models의 image field에 API를 적용하여 확인해보면 다음과 같은 오류가 발생한다.
이럴 때, API에 관련 Field의 정보를 Custom해서 표시해줄 수 있는 Serializer가 필요하다.
from rest_framework.fields import Field
class ImageSerializedField(Field):
def to_representation(self, value):
return {
"url": value.file.url,
"title": value.title,
"width": value.width,
"height": value.height,
}
class BlogAuthorsOrderable(Orderable):
page = ParentalKey("blog.BlogDetailPage", related_name="blog_authors")
author = models.ForeignKey(
"blog.BlogAuthor",
on_delete=models.CASCADE,
)
panels = [
SnippetChooserPanel("author"),
]
@property
def author_image(self):
return self.author.image
api_fields = [
APIField('author_image', serializer=ImageSerializedField()),
]
Django rest_framework모듈에서 Field을 상속받아서 Serializer를 만든다.
def to_representation(self, value):
에서의 value는 APIField의 field 값. 즉, 'author_image'(=author.image)를 가르킨다.
추가)
class BannerCTASerializer(Field):
def to_representation(self, page):
return {
'id': page.id,
'title': page.title,
'first_published_at': page.first_published_at,
'owner': page.owner.username,
'slug': page.slug,
'url': page.url,
}
class HomePage(page):
api_fields = [
APIField('banner_cta', serializer=BannerCTASerializer()),
]
Serializer에는 API에 필요한 모든 Logic을 추가할 수 있다.
'Back-End > Wagtail, Django' 카테고리의 다른 글
Wagtail API v2 Custom Page Properties (0) | 2021.11.25 |
---|---|
Wagtail API v2 Image Rendition Field (0) | 2021.11.24 |
Wagtail API v2 Exposing Orderable Data and StreamFields (0) | 2021.11.24 |
Wagtail API v2 Fetching Fields (0) | 2021.11.24 |
Wagtail API v2 Exposing Custom Fields (0) | 2021.11.24 |