Have trouble with pagination and ordering at the same time. Problem is that one instance can be returned by view multiple times: for example on page 9 and then on page 11.
View:
from rest_framework import filters, viewsets
from django_filters.rest_framework import DjangoFilterBackend
from django_filters import FilterSet
from django_filters.filters import CharFilter
class TariffFilter(FilterSet):
concat_code = CharFilter(field_name='concat_code')
class Meta:
model = Tariff
fields = {
'id': ['in', 'exact'],
'title': ['exact', 'icontains', 'in'],
.... }
class TariffPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
class TariffListViewSet(viewsets.ModelViewSet):
pagination_class = TariffPagination
serializer_class = tariff_serializer.TariffSerializer
filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter,)
filterset_class = TariffFilter
ordering_fields = ['id', 'title', ...]
search_fields = ['title', ...]
def get_queryset(self):
concated_code = Concat(...., output_field=CharField())
queryset = Tariff.not_deleted_objects.annotate(concat_code=concated_code)
return queryset
Serializer:
class TariffSerializer(serializers.ModelSerializer):
element = TariffElementSerializer()
service = ServiceElementSerializer()
class Meta:
model = Tariff
fields = ('pk', 'title', 'code', 'element', 'service', 'concated_code', )
Where is problem? example problem query: http://127.0.0.1:8000/api/?ordering=-title&page=2