Created
May 6, 2020 18:49
-
-
Save dhelbegor/421a4ac03c4b4de1ed761fb91ba4d294 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## utils.py | |
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator | |
def get_paginator(qs, page_size, page, count, paginated_type, **kwargs): | |
""" | |
Method to paginate with some basics parameters in the query. | |
@page: get current page | |
@pages: show total of pages | |
@count: show the total of items in the query | |
@page_size: the page size param | |
@has_next: says if have a next page | |
@has_prev: says if have a prev page | |
@results: the objects for this pagination | |
""" | |
paginator = Paginator(qs, page_size) | |
try: | |
page = paginator.page(page) | |
except PageNotAnInteger: | |
page = paginator.page(1) | |
except EmptyPage: | |
page = paginator.page(paginator.num_pages) | |
return paginated_type( | |
page=page.number, | |
pages=paginator.num_pages, | |
count=paginator.count, | |
page_size=paginator.per_page, | |
has_next=page.has_next(), | |
has_prev=page.has_previous(), | |
results=page.object_list, | |
**kwargs | |
) | |
## schema.py | |
class PostType(DjangoObjectType): | |
class Meta: | |
model = Post | |
interfaces = (graphene.Node, ) | |
class PostPaginatedType(graphene.ObjectType): | |
page = graphene.Int() | |
pages = graphene.Int() | |
count = graphene.Int() | |
page_size = graphene.Int() | |
has_next = graphene.Boolean() | |
has_prev = graphene.Boolean() | |
results = graphene.List(PostType) | |
class Query(object): | |
posts = graphene.Field( | |
PostPaginatedType, | |
page=graphene.Int(), | |
page_size=graphene.Int() | |
) | |
def resolve_post(self, info, page=None, page_size=20, count=0, **kws): | |
qs = Post.objects.all() | |
return get_paginator( | |
qs,page_size,page, count, PostPaginatedType) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment