Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to make Paginated response from queryset ? #195

Open
Elixir-MeetThoriya opened this issue Oct 24, 2024 · 2 comments
Open

How to make Paginated response from queryset ? #195

Elixir-MeetThoriya opened this issue Oct 24, 2024 · 2 comments

Comments

@Elixir-MeetThoriya
Copy link

Elixir-MeetThoriya commented Oct 24, 2024

   @http_get(
        path="",
        response={
            HTTPStatus.OK: PaginatedResponseSchema[CountrySchema] | List[CountrySchema],
            HTTPStatus.INTERNAL_SERVER_ERROR: ErrorSchema
        },
        summary="Country List",
        description="This endpoint retrieves a list of countries.",
        url_name="country_list"
    )
    # @paginate()  # use default pagination (which define in setting.py)
    @ordering(Ordering, ordering_fields=['name', 'code'])
    @searching(Searching, search_fields=['name', 'code'])
    def list(self):
        try:
            if self.request.headers.get('no_page') == 1:
                return self.model.objects.all()
            else:
                return .................

Hiiii @eadwinCode
this is my list api ..
default pagination class = from ninja_extra.pagination import PageNumberPaginationExtra
i need to send condition base response (paginated or non-paginated)
so in my list api-function how to make a paginated response, without using "@paginate" decorator.

@eadwinCode
Copy link
Owner

eadwinCode commented Nov 1, 2024

@Elixir-MeetThoriya you can make your API function by return paginated response by returning PaginatedResponseSchema instance

...
items = list(self.mode.objects.all()
return PaginatedResponseSchema[CountrySchema](count=len(items), results=items, next=None, previous=None)

@Elixir-MeetThoriya
Copy link
Author

Elixir-MeetThoriya commented Nov 7, 2024

@eadwinCode i know this way but
i think is not proper way ,
because
if we use
return return PaginatedResponseSchema[CountrySchema](count=len(items), results=items, next=None, previous=None)

pagination not work.

please give me another way which use default paginate/pagination functionality.

    @http_get(
        path="",
        response={
            HTTPStatus.OK: PaginatedResponseSchema[ActivitySchema] | List[ActivitySchema],
            HTTPStatus.INTERNAL_SERVER_ERROR: ErrorSchema
        },
        summary="Activity List",
        description="This endpoint retrieves a list of activity.",
        url_name="activity_list"
    )
    # @paginate()
    @ordering(Ordering, ordering_fields=['name'])
    @searching(Searching, search_fields=['name'])
    def list(self):
        try:
            if self.request.headers.get('no_page') == 1:
                 return self.model.objects.all()
            else:
                 # return super().list(filter_kwargs={'center_id': self.center_id})
                 qs = list(self.model.objects.all())
                 return PaginatedResponseSchema[ActivitySchema](count=len(qs), results=qs, next=None, previous=None)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants