【发布时间】:2019-04-16 17:52:00
【问题描述】:
我希望能够通过带有 GET 请求的 url 参数在单个 DRF 请求中按 id 请求多个 db 对象。我阅读了this stackoverflow post 和 DRF 在filtering against query parameters 上的文档,并认为我了解如何实施,但我的解决方案有点偏离。它将返回一个响应,但不过滤查询集(多个 id 响应为{"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)),
]`
目标是发出像 curl -X GET --header 'Accept: application/json' --header 'Api-Key: {{ key }}' 'http://api.foo.com/v1/events/list/?ids=1,2,3,4,5' 这样的 GET 请求,但目前返回的是 {"detail":"Not found."} 响应
不带参数的curl -X GET --header 'Accept: application/json' --header 'Api-Key: {{ key }}' 'http://api.foo.com/v1/events/list/' 请求返回未过滤的查询集
【问题讨论】:
-
不相关但在基于类的视图中,您应该将
permission_classes定义为类的属性,而不是装饰器。permission_classes =[HasAPIAccess, HasUnrestrictedAPIAccess] -
谢谢,很高兴知道
标签: django django-rest-framework django-urls