自定义页面表示形式ag API中的嵌套图像字段

时间:2019-02-26 05:34:02

标签: django-rest-framework wagtail

我们正在使用wagtail API构建无头CMS。 我们的主要模型变得很长,以使表示形式更清洁,并且前端更易于访问, 我正在尝试将PageModel的不同字段分为几部分

但是我无法序列化嵌套的ImageField。

这是我的PageModel:

class LandingPage(Page):
…
introduction_headline= models.CharField()
introduction_text = RichTextField()
introduction_icon = models.ForeignKey(
    'main.CaptionImage',
    null=True,
    blank=True,
    on_delete=models.SET_NULL,
    related_name = '+',
)
…

我想将这些字段分组为api中的一个部分,如下所示:

{
    "id": 3,
    "meta": {…},
    "introduction_section": {
        "introduction_headline": "intro head",
        "introduction_text": "<p>intro text</p>",
        "introduction_image": {
            "id": 1,
            "meta": {
                "type": "main.CaptionImage",
                "detail_url": "http://localhost/api/v2/images/1/",
                "download_url": "/media/original_images/1.png"
                 },
            "title": "german_design_image.png",
            "caption": "Pretty Image"
            },
    },…

我设法通过编写自定义的IntroductionSection-序列化程序来部分完成此操作:

class LandingPage(Page):
    …
    api_fields = [
        APIField('introduction_section', serializer=IntroductionSectionField(source='*')),
        …
    ]

class IntroductionSectionField(Field):
    read_only = True
    write_only = False

    def to_representation(self, value): 
        return {
            "introduction_headline" : value.introduction_headline,
            "introduction_text" : value.introduction_text,
            "introduction_image" : ?
    }    

但是我根本不知道如何序列化嵌套的Image Field

我想要与页面模型的标准嵌套关系表示相同的表示。

我尝试使用get_related_field()的{​​{1}}方法,尝试调用PageModel以及其他各种方法。

0 个答案:

没有答案