过滤字段不应用实际的拟合器集

时间:2019-03-08 17:10:42

标签: wagtail wagtail-apiv2

在自定义页面模型上扩展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)

如果我在呼叫端点时尝试添加过滤器:

  

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

答复将返回与我的模型相关的所有记录。

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

1 个答案:

答案 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)

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

  

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/"
        }
    }
  ]

}