После того, как я обновил до DRF версии 3.9.4, моя конечная точка "list_detail" перестала работать, жалуясь, что не распознала параметры страницы и поля заказа, которые работали раньше. Кажется, проблема в том, что возвращаемая схема не принимает страницы или поля заказа.
Для ясности, это не конечная точка детализации. Просто перечислите конечную точку, которая возвращает больше деталей в каждом результате конечной точки в списке. Для поддержки обеих конечных точек
GET /api/wit/volume/list/
GET /api/wit/volume/list_detail/
я использую как нумерацию страниц, так и фильтр / упорядочение
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.OrderingFilter')
У меня есть представление на основе ModelViewSet, где views.MultiSerializerModelViewSet - просто настройка, которая допускает 2 типа списка конечные точки API. list и list_detail, где list_detail просто возвращает более подробную версию каждого объекта в списке
class MultiSerializerModelViewSet(viewsets.ModelViewSet):
'''A ModelViewSet that supports different serializers for different actions '''
serializer_class_dict = {}
def get_serializer_class(self):
return self.serializer_class_dict.get(self.action, self.serializer_class)
Я не думаю, что вышеуказанная настройка вызывает проблему, но по крайней мере ранее действие было установлено в 'list_detail 'и я смог использовать тип Serializer, который вернул больше деталей, как указано выше.
class VolumeViewSet(views.MultiSerializerModelViewSet):
serializer_class_dict = {
'read_detail': volserializers.VolumeDetailSerializer,
'list_detail': volserializers.VolumeDetailSerializer,
}
@list_route()
def list_get(self, request, *args, **kwargs):
'''Get list '''
return super(VolumeViewSet, self).list(request, *args, **kwargs)
Я попытался изменить его на
@action(method=['get'])
Проблема заключается в том, что действие для этой конечной точки установлено «list_detail» вместо «list». И код, который, по-видимому, генерирует представление схемы, - это жесткий код для проверки действия == 'list' перед добавлением страницы и фильтрации.
Итак, вопрос в том, как определить конечную точку "list_detail", который имеет метод = 'GET' и все еще может поддерживать разбиение на страницы и фильтрацию / упорядочение в DRF 3.9.4?