class CategoryNode(DjangoNode): children = graphene.List(graphene.LazyType(lambda _: CategoryNode)) parent = graphene.Field(graphene.LazyType(lambda _: CategoryNode)) has_books = graphene.Boolean() books_count = graphene.Int() def __init__(self, *args, **kwargs): self.facets = kwargs.pop('facets', None) super(CategoryNode, self).__init__(*args, **kwargs) def resolve_books_count(self, *args): facets = getattr(self, 'facets', None) if facets is None: return self.instance.books.count() else: return facets.get(self.instance.pk, 0) def resolve_children(self, *args): return [ CategoryNode(cat, facets=self.facets) for cat in self.instance.get_children() ] def resolve_parent(self, *args): return CategoryNode(self.instance.get_parent()) def resolve_has_books(self, *args): return self.instance.books.exists() class Meta: model = Category
class UserType(graphene.ObjectType): id = graphene.String() first_name = graphene.String(description='first name of the user') last_name = graphene.String(description='last name of the user') email = graphene.String(description='email of the user') username = graphene.String(description='username of the user') posts = graphene.List(graphene.LazyType(lambda _: PostType)) comments = graphene.List(graphene.LazyType(lambda _: CommentType))
class UserType(graphene.ObjectType): id = graphene.String() first_name = graphene.String(description='first name of the user') last_name = graphene.String(description='last name of the user') email = graphene.String(description='email of the user') username = graphene.String(description='username of the user') posts = graphene.List(graphene.LazyType(lambda _: PostType)) comments = graphene.List(graphene.LazyType(lambda _: CommentType)) @classmethod def resolve_posts(cls, obj, input, info): return obj.posts.all() def resolve_comments(obj, cls, input): return obj.comments.all()
class PostType(graphene.ObjectType): id = graphene.String() title = graphene.String(description='title of the post') body = graphene.String(description='body of the post') comments = graphene.List(graphene.LazyType(lambda _: CommentType)) user = graphene.Field( 'UserType', id=graphene.ID(), description='User for this post', ) @classmethod def resolve_comments(cls, obj, input, info): return obj.comments.all()
class CategoryFacet(graphene.ObjectType): category = graphene.Field(graphene.LazyType(lambda _: CategoryNode)) books_count = graphene.Int()