想象一下我有一个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端点?
答案 0 :(得分:1)
我不确定如何回答主要问题,但是我可以帮助为片段创建单独的API端点。
您必须使用现有Wagtail终结点类作为基础,例如BaseAPIEndpoint
然后,在您的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))
]