对字段进行筛选不会应用实际的拟合器集



在自定义页面模型上扩展baseapiendpoint会通过API公开其页面,但是,当我尝试应用字段过滤器时,它不应用于应用,并且响应返回所有页面不管。该文档没有提及此。

例如:

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)

如果我在调用端点时尝试添加过滤器:

http://localhost:8000/api/v2/refname/?id = 6

Repsonse将返回与我的模型关联的所有记录。

{
"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类时,如何在端点上实现过滤?

您需要从wagtail.api.v2.filters导入FieldsFilter类,然后将其附加到自定义端点类的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)

这样做之后,您的端点现在将接受字段上的过滤。

http://localhost:8000/api/v2/refname/?id = 6

{
"meta": {
    "total_count": 1
},
"items": [
    {
        "id": 6,
        "meta": {
            "type": "projects.ProjectTaskPage",
            "detail_url": "http://localhost/api/v2/pages/6/"
        }
    }
  ]
}

最新更新