Задать вопрос
@Pythonist

Django REST — Как показывать каждый 5 элемент из фильтрованного queryset?

День добрый. У меня выводятся сейчас все фильтрованные данные из БД. А нужно выводить только каждый 5 элемент. Как это сделать? Спасибо. Мой код

serializers.py

class CoinCostsSerializer(serializers.ModelSerializer):
    class Meta:
        fields = ('price', 'timestamp')
        model = CoinCosts
        
    class CoinSerializer(serializers.ModelSerializer):
        class Meta:
            fields = ('symbol', 'crr', 'costs')
            model = Coins
        costs = CoinCostsSerializer(source='filtered_coincosts', many=True)

views.py

class DateTimeGteFilter(filters.IsoDateTimeFilter):
        def filter(self, qs, value):
            if value != None:
                return qs.prefetch_related(Prefetch('coincosts_set', to_attr='filtered_coincosts', queryset=CoinCosts.objects.filter(timestamp__gte=value)
                    )
                )
            else:
                return qs
        
    class CoinCostFilterSet(filters.FilterSet):
        timestamp = DateTimeGteFilter()
        
        class Meta:
            model = Coins
            fields = {
                'symbol': ['exact'],
            }


пытался подставлять [::5] в разные места, везде ошибка. Не знаю куда поставить и как толком это сделать
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@szelga
Джанги под рукой нет, так что мой ответ -- не полное решение, а направление, куда копать.

в методе get_queryset:

queryset = queryset.annotate(
    row_number=RawSQL('row_number() OVER (ORDER BY поле_сортировки)', [])
).annotate(rowmod5=F('row_number') % 5).filter(rowmod5=0)


см.:
https://stackoverflow.com/questions/4799816/return...
https://stackoverflow.com/questions/56486459/how-t...
https://sophilabs.co/blog/sql-window-functions-in-...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы