user1292656
user1292656

Reputation: 2560

Set the limit of a specific query set

i have an api view which returns some dropdown options. I am trying to set the queryset limit in order to avoid the pagination. I tried the follow but i get error: Cannot filter a query once a slice has been taken. . If i remove the [:100000] it is ok

class TestViewSet(
    GenericViewSet,
    mixins.ListModelMixin,
    mixins.DestroyModelMixin,
):

queryset = models.Test.objects.select_related('user').all()

    def get_queryset(self):
        base_qs = super(TestViewSet, self).get_queryset()
        if self.action == 'get_dropdown_options':
            base_qs = base_qs.filter(
                user_id=self.request.get_session()['user_id']
            )[:100000]
        return base_qs

Upvotes: 0

Views: 147

Answers (1)

Ashish
Ashish

Reputation: 459

This error is occured because once you slice your queryset than you can not perform queryset operations on it because after slicing it will become a list. And now answer to your question(if you dont want to user pagination) you can do something like:

q_ids = base_qs.filter(
            user_id=self.request.get_session()['user_id']
        ).values_list('id', flat=True)[:100000]

and than

base_qs.filter(
            user_id=self.request.get_session()['user_id'], id__in=q_ids
        )

Upvotes: 1

Related Questions