Вложенное поле изображения в пользовательском представлении страницы wagtail api - PullRequest
0 голосов
/ 26 февраля 2019

Мы создаем безголовую CMS с API трясогузки.Наша основная модель стала очень длинной, чтобы сделать представление более понятным и более легкодоступным для интерфейса. Я пытаюсь сгруппировать различные поля моей 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"
            },
    },…

Мне удалось сделать это по частям, написав собственный вводный раздел - сериализатор:

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() метод PageModel, пытался вызвать ImageSerializer и всякие другие вещи.

...