mno*_*tka 3 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')
]
Run Code Online (Sandbox Code Playgroud)
现在在 wagtail API 页面端点中,此页面将如下所示:
{
"id": 1,
"meta": { ... },
"snippet": {
"id": 1,
"meta": {
"type": "my_module.MySnippet"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能使此端点显示代码段的内容?
另外,如何仅为片段创建单独的 API 端点?
我不确定如何回答主要问题,但我可以帮助为片段创建单独的 API 端点。
您必须在应用程序根目录中创建一个 endpoints.py 文件,使用现有的 Wagtail 端点类作为基础,例如 BaseAPIEndpoint
然后,在 api.py 文件中注册新端点。
端点.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',
]
Run Code Online (Sandbox Code Playgroud)
api.py
from .endpoints import MySnippetModelAPIEndpoint
...
sua_api_router.register_endpoint('snippets', MySnippetModelAPIEndpoint)
Run Code Online (Sandbox Code Playgroud)
我还会查看 Wagtail 核心中的 endpoints.py 文件,以便您可以查看还可以扩展或修改的内容。
https://github.com/wagtail/wagtail/blob/master/wagtail/api/v2/endpoints.py
这就是我的做法,尽管就我而言,这是一个足够简单的表示
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))
]
Run Code Online (Sandbox Code Playgroud)
您可以将“ str ”方法添加到您的代码片段中
@register_snippet
class MySnippet(models.Model):
content = models.CharField(max_length=255)
def __str__(self):
return self.content
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1123 次 |
| 最近记录: |