获取wagtail API“ child_of”调用的所有api_fields

时间:2019-07-31 21:35:39

标签: wagtail wagtail-apiv2

我启用了Wagtail的API应用程序,以便使用形式如下的BlogPage模型查询我的Wagtail实例:

class BlogPage(Page):
    author = models.CharField(
        verbose_name='Author',
        max_length=50,
        blank=False,
    )

    body = StreamField([
        ...
    ])

    tags = ClusterTaggableManager(through=BlogPageTag, blank=True)

    content_panels = Page.content_panels + [
        FieldPanel('author'),
        StreamFieldPanel('body'),
    ]

    promote_panels = Page.promote_panels + [
        FieldPanel('tags'),
    ]

    api_fields = [
        APIField('author'),
        APIField('tags'),
    ]

然后使用api/v2/pages?type=app.BlogPage&fields=*查询wagtail API会产生预期的结果:

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "meta": {
        "total_count": 5
    },
    "items": [
        {
            "id": 7,
            "meta": {
                "type": "app.BlogPage",
                "detail_url": "...",
                ...
            },
            "title": "Test Title",
            "author": "Author McWritypants",
            "tags": [
                "tag1",
                "tag2"
            ]
        },
        ...
    ]
}

但是,如果我运行相同的查询但是使用child_of(因为我有一个IndexPage模型可以包含多个BlogPage子项,则)所有自定义api_field字段/值都会突然消失。

例如使用api/v2/pages?child_of=4&fields=*(索引页的pk = 4)产生以下响应:

HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "meta": {
        "total_count": 5
    },
    "items": [
        {
            "id": 7,
            "meta": {
                "type": "app.BlogPage",
                "detail_url": "...",
                ...
            },
            "title": "Test Title",
        },
        ...
    ]
}

因此,对于BlogPage类型的任何子类型,authortags字段都会突然丢失,并且类似地,对于任何其他具有自定义api_fields设置的子类型,这些字段也永远不会进入响应。

我通读了https://docs.wagtail.io/en/stable/advanced_topics/api/v2/usage.html,尤其是https://docs.wagtail.io/en/stable/advanced_topics/api/v2/usage.html#all-fields,感觉就像是在明确地说fields=*我应该获取声明的每个字段。

没有,所以:我该如何实现?

(实际上没有将children() quertyset转换为实际数据,然后对其进行迭代以找到所有不同的.specific().__class__.__name__值,这种方法虽然有效,但感觉非常错误)

0 个答案:

没有答案