Tôi đang sử dụng khung công tác REST Django, và tôi đã thiết lập chế độ xem với phương thức tuyến danh sách bổ sung. Làm thế nào tôi có thể nhận được URL của phương thức đó trong trang gốc API?Bao gồm các phương thức list_route trong gốc API của khung công tác REST của Django
Dưới đây là một phiên bản đơn giản của bộ quan điểm của tôi:
class BookViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
permission_classes = (permissions.IsAuthenticated,)
@list_route(methods=['get'])
def featured(self, request):
queryset = self.filter_queryset(self.get_queryset()).filter(featured=True)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
tôi đăng ký xem thiết lập trong urls.py
:
router = DefaultRouter()
router.register('books', BookViewSet)
urlpatterns = patterns(
url(r'^api/', include(router.urls), name='api_home'),
#...
)
URL cho books/featured
được định tuyến đúng, nhưng khi tôi đi đến http://localhost:8000/api
, Tôi chỉ thấy điều này:
HTTP 200 OK
Content-Type: application/json
Vary: Accept
Allow: GET, HEAD, OPTIONS
{
"books": "http://localhost:8000/api/books/"
}
Làm thế nào tôi có thể nhận được một mục nhập cho một cái gì đó như thế này?
"book-featured-list": "http://localhost:8000/api/books/featured"
Có vẻ như con đường để làm điều này là với một [Router tùy chỉnh] (http://www.django-rest-framework.org/api -guide/routers/# custom-routers) và có thể ghi đè phương thức 'get_api_root_view()' của ['DefaultRouter'] (https://github.com/tomchristie/django-rest-framework/blob/4e5da16961c8f11d01a2f9dc475efacb29e778c7/rest_framework/ routers.py # L273). –