Фильтрация по полям не применяет фактический набор соответствия - PullRequest
1 голос
/ 08 марта 2019

Расширение 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

, ответ будет возвращать все записи, связанные с моей моделью.

{
"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 Ответ

1 голос
/ 08 марта 2019

Вам нужно будет импортировать класс 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/"
        }
    }
  ]

}
...