我启用了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类型的任何子类型,author
和tags
字段都会突然丢失,并且类似地,对于任何其他具有自定义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__
值,这种方法虽然有效,但感觉非常错误)