在自定义页面模型上扩展BaseAPIEndpoint会通过api公开其页面,这很棒,但是,当我尝试应用字段过滤器时,它不会被应用,并且响应返回所有页面。 documentation对此没有提及。
例如:
endpoints.py
from wagtail.api.v2.endpoints import BaseAPIEndpoint
from app.models import MyPageClass
class MyPageClassAPIEndpoint(BaseAPIEndpoint):
refname= MyPageClass
model = refname
api.py:
from wagtail.api.v2.router import WagtailAPIRouter
from .endpoints import MyPageClassAPIEndpoint
# Create the router. "wagtailapi" is the URL namespace
api_router = WagtailAPIRouter('wagtailapi')
api_router.register_endpoint('refname', MyPageClassAPIEndpoint)
如果我在呼叫端点时尝试添加过滤器:
答复将返回与我的模型相关的所有记录。
{
"meta": {
"total_count": 2
},
"items": [
{
"id": 6,
"meta": {
"type": "app.MyPageClass",
"detail_url": "http://localhost/api/v2/pages/6/"
}
},
{
"id": 7,
"meta": {
"type": "app.MyPageClass",
"detail_url": "http://localhost/api/v2/pages/7/"
}
}
]
}
在扩展BaseAPIEndpoint类时如何在端点上实现过滤?
答案 0 :(得分:0)
您将需要从FieldsFilter
导入wagtail.api.v2.filters
类,然后将其附加到自定义端点的类的filter_backends
上,如下所示:
from wagtail.api.v2.endpoints import BaseAPIEndpoint
from wagtail.api.v2.filters import FieldsFilter
from app.models import MyPageClass
class MyPageClass(BaseAPIEndpoint):
refname= MyPageClass
model = refname
BaseAPIEndpoint.filter_backends.append(FieldsFilter)
这样做之后,您的端点现在将接受对字段的过滤。
{
"meta": {
"total_count": 1
},
"items": [
{
"id": 6,
"meta": {
"type": "projects.ProjectTaskPage",
"detail_url": "http://localhost/api/v2/pages/6/"
}
}
]
}