Django 设置特定查询集的限制
我有一个api视图,它返回一些下拉选项。我试图设置queryset限制以避免分页。我尝试了以下操作,但出现错误:获取切片后无法过滤查询。如果我移除[:100000]就可以了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()
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框架才是真正的答案