Я создал SolutionPage
и внутри поля content
есть вложенный блок short_portfolio
. Я добавил несколько ProjectPage
экземпляров через админ панель Wagtail в PageChooserBlock
.
class SolutionPage(Page):
...
content = StreamField([
...
...
('short_portfolio', blocks.StructBlock([
('title', blocks.CharBlock(required=False)),
('description', blocks.RichTextBlock(required=True)),
('projects', blocks.StreamBlock([
('project', blocks.PageChooserBlock(ProjectPage)),
], required=False, max_num=4)),
])),
], blank=True, null=True, validators=[UniqueProjectsInShortPortfolioValidator()])
Теперь я работаю над представлением API для экспорта в PDF и Мне нужно извлечь все ProjectPage
объекты из заданного SolutionPage
import requests
from django.conf import settings
from django.http import HttpResponse
from django.shortcuts import render
from rest_framework import views
from rest_framework.generics import get_object_or_404
from portfolio.models import ProjectPage
from solutions.models import SolutionPage
class PortfolioToPdfView(views.APIView):
def get(self, request, *args, **kwargs):
def get_404():
return HttpResponse(
render(
request=None,
template_name='404.html',
content_type="text/html"
),
content_type='text/html'
)
path = request.META['PATH_INFO']
if path.find('solutions') == -1:
return get_404()
slug = path[path[1:].find('/') + 2:]
slug = slug[:slug.find('/')]
solution_page = get_object_or_404(SolutionPage, slug=slug)
short_portfolio = solution_page.content.stream_block.child_blocks["short_portfolio"]
projects = [project.child_blocks["project"].target_model for project in short_portfolio.child_blocks["projects"]]
...
response = HttpResponse(request, content_type='application/pdf')
return response
Проблема в том, что таким образом я могу извлечь только что-то вроде "схемы" страницы, но не ее фактическое содержимое.
TypeError at /solutions/ai-driven-machine-learning-software/portfolio-pdf/
'StreamBlock' object is not iterable
Отладочные переменные