Установить предел для определенного набора запросов c - PullRequest
0 голосов
/ 24 января 2020

У меня есть представление API, которое возвращает некоторые параметры раскрывающегося списка. Я пытаюсь установить предел набора запросов, чтобы избежать нумерации страниц. Я попробовал следующее, но я получаю ошибку: Cannot filter a query once a slice has been taken.. Если я удалю [: 100000], все в порядке

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

1 Ответ

1 голос
/ 24 января 2020

Эта ошибка возникает из-за того, что после того, как вы нарежете свой набор запросов, вы не сможете выполнять над ним операции, потому что после нарезки он станет списком. А теперь ответьте на свой вопрос (если вы не хотите разбивать на страницы пользователя), вы можете сделать что-то вроде:

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

и затем

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