2013-11-28 1 views
1

У меня возникают проблемы с набором запросов в Django. К сожалению, я не могу использовать Django REST Framework, созданную в разбивке на страницы, потому что он добавляет ненужные поля JSON, такие как «next», «previous» и «count», поэтому я хотел ограничить использование опции [: 10] в наборе запросов.Queryset Невозможно изменить порядок запроса после того, как был сделан фрагмент

В моей попытке ниже, я получаю сообщение об ошибке: Queryset Cannot reorder a query once a slice has been taken.

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 

Я понимаю, почему я получаю эту ошибку, если я применил [:10], прежде чем я сделал order_by, но так как я делаю это после того, почему он дал бы мне эту ошибку?

Спасибо, Все

ответ

1

Эта ошибка возникает после того, как набор запросов возвращается get_queryset, так как у LocationViewSet есть атрибут ordering, который пытается повторно выполнить запрос.

0

Вы можете написать необработанный запрос на 10 результат в вашем коде, как, что он будет работать,

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

Храните одну вещь в сыром запросе, вы должны всегда получать первичный ключ таблицы, это обязательно. Здесь organization_id является первичным ключом таблицы contact_organization.

Смежные вопросы