Django Rest Framework - Похоже, что пагинация набора запросов происходит некорректно, что приводит к длительному времени ожидания перед отображением на передней панели.
Я столкнулся с проблемой, когда на получение 25 элементов в постраничном ответе уходит до 30 секунд. Это происходит при первоначальной загрузке страницы, а также при любых последующих запросах страницы через кнопки datatables previous и next.
В рассматриваемой модели примерно 600 тыс. записей, при этом запрос к api содержит параметр запроса для фильтрации по типу объявления (сдача в аренду или продажа). Есть и другие фильтры, применяемые к набору запросов, чтобы игнорировать элементы, которые не попадают в очередь, оставляя 37 тысяч записей на стороне продажи и 90 тысяч на аренде, которые возвращаются.
Структура моей модели выглядит следующим образом:
Мой сериализатор:
class ListingSerializer(serializers.ModelSerializer):
type_display = serializers.CharField(read_only=True)
process_display = serializers.CharField(read_only=True)
class Meta:
model = Listing
fields = [
'listing_id',
'url',
'address',
'date',
'agent',
'sector',
'in_user_queue',
'process_probability',
'portal',
'assigned_user',
'updated_by',
'type_display',
'process_display',
'updated_timestamp'
]
depth = 0
Viewset is:
class GlobalQueueVS(viewsets.ReadOnlyModelViewSet):
serializer_class = serializers.ListingSerializer
http_method_names = ['get']
permission_classes = [permissions.IsAuthenticated]
search_fields = ["sector__sector", "assigned_user__username"]
def get_queryset(self):
filters = {'processed': False, 'unprocessable': False, 'available': True}
to_buy = self.request.query_params.get('to_buy', None)
if to_buy is not None:
filters['to_buy'] = to_buy
queryset = Listing.objects.exclude(sector_id=None).order_by('sector_id', '-date').prefetch_related(
'sector', 'assigned_user').only(
'processed', 'unprocessable', 'available', 'to_buy', 'listing_id', 'url', 'address', 'date', 'agent',
'sector', 'in_user_queue', 'process_probability', 'portal', 'assigned_user'
).filter(**filters)
return queryset
Как я могу уменьшить время ожидания, чтобы данные возвращались более своевременно на передний край.