Python 获取切片后,Queryset无法对查询重新排序

Python 获取切片后,Queryset无法对查询重新排序,python,django,django-queryset,Python,Django,Django Queryset,我在Django的queryset遇到了一些麻烦。不幸的是,我不能使用内置分页的Django REST框架,因为它添加了“next”、“previous”和“count”等未命名的JSON字段,所以我想限制在queryset上使用[:10]选项 在下面的尝试中,我得到了错误: Queryset一旦获取了一个切片,就不能对查询重新排序。 class LocationsViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = ser

我在Django的queryset遇到了一些麻烦。不幸的是,我不能使用内置分页的Django REST框架,因为它添加了“next”、“previous”和“count”等未命名的JSON字段,所以我想限制在queryset上使用[:10]选项

在下面的尝试中,我得到了错误:
Queryset一旦获取了一个切片,就不能对查询重新排序。

class LocationsViewSet(viewsets.ReadOnlyModelViewSet):
    serializer_class = serializers.LocationSerializer
    ordering = ('location_name',)

    def get_queryset(self):
        queryset = models.GeonamesLocation.objects.all()
        name_prefix = self.request.QUERY_PARAMS.get('name_prefix', None)
        if name_prefix is not None:
            if len(name_prefix) < 3:
                raise exceptions.ParseError("'name_prefix' must consist of at least 2 characters")
            queryset = queryset.filter(location_name__icontains = name_prefix).order_by('location_name', 'geonames_country', 'geonames_region')[:10]
        return queryset
类位置视图集(ViewSet.ReadOnlyModelViewSet):
serializer\u class=serializers.LocationSerializer
排序=('location_name',)
def get_queryset(自我):
queryset=models.GeonamesLocation.objects.all()
name\u prefix=self.request.QUERY\u PARAMS.get('name\u prefix',None)
如果name_前缀不是None:
如果len(名称前缀)<3:
引发异常。ParseError(“'name\u prefix'必须至少包含2个字符”)
queryset=queryset.filter(location\u name\u icontains=name\u前缀)。排序依据('location\u name','geonames\u country','geonames\u region')[:10]
返回查询集
我理解如果我在下订单之前应用了
[:10]
,为什么会出现此错误,但既然我是在下订单之后才这样做的,为什么会出现此错误

谢谢,
标记

您可以在代码中为10个结果编写原始查询,就像它可以工作一样

org = Organization.objects.raw('SELECT organization_id, name FROM organization where is_active=1 ORDER BY name limit 10')

在原始查询中保留一件事,您必须始终获取表的主键,这是必需的。这里的
organization\u id
contact\u organization
表的主键。

您可以在代码中为10个结果编写原始查询,就像它可以工作一样

org = Organization.objects.raw('SELECT organization_id, name FROM organization where is_active=1 ORDER BY name limit 10')

在原始查询中保留一件事,您必须始终获取表的主键,这是必需的。此处,
organization\u id
contact\u organization
表的主键。

此错误发生在get\u queryset返回queryset后,因为LocationViewSet具有“ordering”属性,该属性尝试再次对queryset进行排序。

此错误发生在get\u queryset返回queryset后,因为LocationViewSet具有“ordering”属性,该属性尝试再次对queryset进行重新排序