Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 设置特定查询集的限制_Django_Django Rest Framework - Fatal编程技术网

Django 设置特定查询集的限制

Django 设置特定查询集的限制,django,django-rest-framework,Django,Django Rest Framework,我有一个api视图,它返回一些下拉选项。我试图设置queryset限制以避免分页。我尝试了以下操作,但出现错误:获取切片后无法过滤查询。如果我移除[:100000]就可以了 class TestViewSet( GenericViewSet, mixins.ListModelMixin, mixins.DestroyModelMixin, ): queryset = models.Test.objects.select_related('user').all()

我有一个api视图,它返回一些下拉选项。我试图设置queryset限制以避免分页。我尝试了以下操作,但出现错误:获取切片后无法过滤查询。如果我移除[: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

发生此错误的原因是,一旦切片queryset,就无法对其执行queryset操作,因为切片后它将成为一个列表。 现在回答您的问题如果您不想使用分页,您可以执行以下操作:

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
        )

为什么不能在这里使用分页?这就是它的目的。Django Rest框架才是真正的答案