-
Notifications
You must be signed in to change notification settings - Fork 764
Closed
Description
Any ideas how can I solve this problem to let StreamField read on GraphQL?
Below are the code and error show. after i run localhost:8080/graphql
schema.py
import graphene
from graphene_django import DjangoObjectType
from pages.models import Page
class PageType(DjangoObjectType):
class Meta:
model = Page
# Query
class Query(graphene.ObjectType):
pages = graphene.List(PageType)
def resolve_pages(self, info, **kwargs):
return Page.objects.all()
models.py
from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList, StreamFieldPanel
from wagtail.wagtailcore.models import Page as WagtailPage, Orderable
from django.http import JsonResponse
from wagtail.wagtailcore.fields import StreamField
from wagtail.wagtailcore import blocks
from wagtail.wagtailimages.blocks import ImageChooserBlock
from wagtail.wagtaildocs.blocks import DocumentChooserBlock
from wagtail.wagtailsnippets.blocks import SnippetChooserBlock
from wagtail.wagtailsnippets.edit_handlers import SnippetChooserPanel
from wagtail.wagtailembeds.blocks import EmbedBlock
from modelcluster.fields import ParentalKey
from django.db import models
class PageIndex:
# Parent page / subpage type rules
parent_page_types = []
subpage_types = []
def serve(self, request):
return JsonResponse({
'title': self.title,
'body': self.body,
})
class CarouselBlock(blocks.StreamBlock):
image = ImageChooserBlock()
caption = blocks.TextBlock(blank=True)
class Meta:
icon = 'image'
class Page(WagtailPage):
body = StreamField([
('title', blocks.TextBlock(icon="title")),
('paragraph', blocks.RichTextBlock(editor='tinymce')),
('url', blocks.URLBlock()),
('blockquote', blocks.BlockQuoteBlock()),
('document', DocumentChooserBlock()),
('image', ImageChooserBlock()),
('media', EmbedBlock()),
('snippet', SnippetChooserBlock(target_model='contents.Content')),
], blank=True, null=True)
content_panels = WagtailPage.content_panels + [
StreamFieldPanel('body'),
]
edit_handler = TabbedInterface([
ObjectList(content_panels, heading='Contents'),
ObjectList(WagtailPage.promote_panels, heading='Promote'),
ObjectList(WagtailPage.settings_panels, heading='Settings', classname="settings"),
])
def get_url_parts(self, *args, **kwargs):
super(Page, self).get_url_parts(*args, **kwargs)
# Snippet Model
class PageContentPlacement(Orderable, models.Model):
page = ParentalKey('pages.Page', related_name='content_placements')
content = models.ForeignKey('contents.Content', related_name='+')
class Meta:
verbose_name = "content placement"
verbose_name_plural = "content placements"
panels = [
SnippetChooserPanel('content'),
]
def __str__(self):
return self.page.title + " -> " + self.content.description
zbyte64 and osartun