Я использую трясогузку в качестве бэкэнда REST для веб-сайта. Веб-сайт построен с использованием реакции и извлекает данные через API трясогузки v2.
Веб-сайт SPA должен иметь возможность показывать превью страниц в трясогузке. Моя мысль состояла в том, чтобы переопределить serve_preview
в модели страницы и просто серализовать новую страницу как JSON и записать ее в кеш, к которому может получить доступ мой интерфейс. Но у меня проблемы с сериализацией моей страницы в json. Все предпринятые попытки кажутся очень "хакерскими"
Я сделал несколько попыток, используя расширения трясогузок, встроенные в сериализаторы, но безуспешно:
Попытка 1:
def serve_preview(self, request, mode_name):
from wagtail.api.v2.endpoints import PagesAPIEndpoint
endpoint = PagesAPIEndpoint()
setattr(request, 'wagtailapi_router',
WagtailAPIRouter('wagtailapi_v2'))
endpoint.request = request
endpoint.action = None
endpoint.kwargs = {'slug': self.slug, 'pk': self.pk}
endpoint.lookup_field = 'pk'
serializer = endpoint.get_serializer(self)
Очень некрасиво использовать здесь маршрутизатор и устанавливать кучу атрибутов.
Попытка 2:
def serve_preview(self, request, mode_name):
from wagtail.api.v2.endpoints import PagesAPIEndpoint
fields = PagesAPIEndpoint.get_available_fields(self)
if hasattr(self, 'api_fields'):
fields.extend(self.api_fields)
serializer_class = get_serializer_class(
type(self), fields, meta_fields=[PagesAPIEndpoint.meta_fields], base=PageSerializer)
serializer = serializer_class(self)
Лучше, но я получаю проблемы с контекстом:
Traceback (most recent call last):
...
File "/usr/local/lib/python3.5/site-packages/wagtail/api/v2/serializers.py", line 92, in to_representation
self.context['view'].seen_types[name] = page.specific_class
KeyError: 'view'
Какие-нибудь хитрости?