Как получить значения из панели полей потока Wagtail CMS, используя модели Django?

#python #django #postgresql #django-models #wagtail-streamfield

#python #django #postgresql #django-модели #wagtail-streamfield

Вопрос:

Я создаю веб-страницу, используя wagtail CMS, Django, Postgresql, и в нижней части страницы я создаю раздел, в котором я буду отображать видео с использованием разбивки на страницы.

Я пытаюсь извлечь данные из моделей Django, используя all_posts = MultiBlogPage.objects.values("all_blogs_content_pages")

и я получаю вывод в виде

 <PageQuerySet [{'all_blogs_content_pages': 
[
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee2d21d0>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed8fa2e8>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35f617e6a0>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed90aac8>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed90af60>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed90a978>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ed90ae48>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee2b9320>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee2b9630>,
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee339f28>, 
<wagtail.core.blocks.stream_block.StreamValue.StreamChild object at 0x7f35ee339470>
]}]>
 

Не мог бы кто-нибудь, пожалуйста, взглянуть на мой код ниже и сообщить мне, как получить точные значения из моделей Django?

 def get_context(self, request, *args, **kwargs):
    context = super(MultiBlogPage, self).get_context(request, *args, **kwargs)
    context['multiblog_page'] = self
    
    // The name of the stream field panel is "all_blogs_content_pages"
    all_posts = MultiBlogPage.objects.values("all_blogs_content_pages")

    print("all_posts...",all_posts)

    paginator = Paginator(all_posts, 3)
    print("paginator", paginator)
    page = request.GET.get("page")

    try:
        posts = paginator.page(page)        
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)
    
    context["posts"] = posts
    return context
 

Ответ №1:

Модели Wagtail можно использовать как стандартные модели django, поэтому преобразование моделей в список dicts не представляется необходимым.

live() фильтрует только опубликованные версии и specific() получает фактическую модель из ваших моделей.py, а не базовый класс страницы.

 def get_context(self, request, *args, **kwargs):
    context = super(MultiBlogPage, self).get_context(request, *args, **kwargs)
    context['multiblog_page'] = self
    
    // The name of the stream field panel is "all_blogs_content_pages"
    all_posts = MultiBlogPage.objects.live().specific()

    print("all_posts...",all_posts)

    paginator = Paginator(all_posts, 3)
    print("paginator", paginator)
    page = request.GET.get("page")

    try:
        posts = paginator.page(page)        
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)
    
    context["posts"] = posts
    return context
 

template.html

 <li>
  {{ post.all_blogs_content_pages }}
</li>
 

Комментарии:

1. Спасибо за ваш ответ. Это было полезно