правильная конечная точка представления списка фильтров DRF для возврата нескольких объектов по идентификатору - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу иметь возможность запрашивать несколько объектов БД по идентификатору в одном запросе DRF через параметр url с запросом GET. Я прочитал этот пост * * * * * * * * * * * документацию DRF по фильтрации по параметрам запроса и подумал, что понял, как реализовать, но мое решение немного не подходит. Он возвратит ответ, но не фильтрует набор запросов (ответ с несколькими идентификаторами {"detail":"Not found."})

views.py

@permission_classes((HasAPIAccess, HasUnrestrictedAPIAccess, ))
class EventListView(generics.ListAPIView):
    serializer_class = EventSerializer
    queryset = Event.objects.all()

    def get_queryset(self):
        ids = self.request.query_params.get('ids', None)
        if ids is not None:
            ids = [ int(x) for x in ids.split(',') ]
            queryset = Event.objects.filter(pk__in=ids)

        else:
            queryset = Event.objects.all()[0:10]

        return queryset

urls.py

router = DefaultRouter()
router.register(r'events', EventViewSet)

my_patterns = [
    url(r'^events/list/$',
        EventListView.as_view(),
        name='events-by-id'),
    url(r'^', include(router.urls)),
]

urlpatterns = [
    url(r'^$', RedirectView.as_view(url='/v1/')),
    url(r'^v1/$', schema_view),
    url(r'^v1/', include(my_patterns)),
]`

цель состоит в том, чтобы сделать запрос GET наподобие curl -X GET --header 'Accept: application/json' --header 'Api-Key: {{ key }}' 'http://api.foo.com/v1/events/list/?ids=1,2,3,4,5', но в настоящее время он возвращает {"detail":"Not found."} ответ

a curl -X GET --header 'Accept: application/json' --header 'Api-Key: {{ key }}' 'http://api.foo.com/v1/events/list/' запрос без параметров возвращает нефильтрованный набор запросов

1 Ответ

0 голосов
/ 13 ноября 2018

выяснил проблему, необходимую только для определения набора запросов в методе, и было ошибкой определить его ранее.однажды я удалил queryset = Event.objects.all(), вид и маршрут URL работают правильно

class EventListView(generics.ListAPIView):
    serializer_class = EventSerializer

    def get_queryset(self):
        ids = self.request.query_params.get('ids', None)
        if ids is not None:
            ids = [ int(x) for x in ids.split(',') ]
            queryset = Event.objects.filter(pk__in=ids)

        else:
            queryset = Event.objects.all()[0:10]

        return queryset
...