Wagtail API-如何公开摘要

时间:2018-08-22 07:42:20

标签: python django django-rest-framework wagtail

想象一下我有一个Snippet和一个包含它的Page

@register_snippet
class MySnippet(models.Model):
    content = models.CharField(max_length=255)


class MyPage(Page):
    snippet = models.ForeignKey('MySnippet', null=True, blank=True, on_delete=models.SET_NULL, related_name='+')

    api_fields = [
        APIFiled('snippet')
    ]

现在在wagtail API页面端点中,此页面将如下所示:

{
    "id": 1,
    "meta": { ... },
    "snippet": {
        "id": 1,
        "meta": {
            "type": "my_module.MySnippet"
        }
    }
}

如何使此端点显示摘要的内容?

此外,如何为片段创建单独的API端点?

2 个答案:

答案 0 :(得分:1)

我不确定如何回答主要问题,但是我可以帮助为片段创建单独的API端点。

您必须使用现有Wagtail终结点类作为基础,例如BaseAPIEndpoint

在您的应用程序根目录中创建一个endpoints.py文件。

然后,在您的api.py文件中注册新端点。

endpoints.py

from wagtail.api.v2.endpoints import BaseAPIEndpoint
from .models import MySnippetModel

class MySnippetModelAPIEndpoint(BaseAPIEndpoint):

    model = MySnippetModel

    body_fields = BaseAPIEndpoint.body_fields + [
        'field_1',
        'field_2',
        'field_3',
    ]

    listing_default_fields = BaseAPIEndpoint.listing_default_fields = [
        'field_1',
        'field_2',
        'field_3',
    ]

api.py

from .endpoints import MySnippetModelAPIEndpoint

...

sua_api_router.register_endpoint('snippets', MySnippetModelAPIEndpoint)

我还将查看Wagtail核心中的endpoints.py文件,以便您可以看到可以扩展或修改的其他内容。

https://github.com/wagtail/wagtail/blob/master/wagtail/api/v2/endpoints.py

答案 1 :(得分:1)

这就是我的操作方式,尽管就我而言,这已经足够简单了

EnumerationCompleted

您可以在代码段中添加“ str ”方法

from rest_framework import serializers

class MyPage(Page):
    snippet = models.ForeignKey('MySnippet', null=True, blank=True, on_delete=models.SET_NULL, related_name='+')

    api_fields = [
        APIField('snippet', serializer=serializers.StringRelatedField(many=True))
    ]