Reputation: 2560
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
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