2016-03-21 2 views
3

я с URL:Джанго остальные рамки URL с суффиксом

api/v1/quote/ # list 
api/v1/quote/1/ # detail 

, как я могу сделать новый URL, как это:

api/v1/quote/1/action 

и отправить запрос пост на эту ссылку с параметром active правда, поэтому он будет использовать id из url и active из сообщения, а затем выполнить это действие?

Любой пример для этого?

У меня есть этот URLS код:

router = routers.DefaultRouter() 
router.register(r'quote', QuoteViewSet) 

и вид:

class QuoteViewSet(viewsets.ModelViewSet): 
    queryset = Quote.active.all() 
    serializer_class = QuoteSerializer 

    filter_backends = (filters.OrderingFilter,) 
    ordering_fields = ('created_at',) 

    http_method_names = ['get', 'post', 'head'] 

ответ

3

Если вы используете Viewset вы можете добавить дополнительное действие с помощью @detail_route и @list_route декораторов (docs)

В вашем случае это может выглядеть так:

class QuoteViewSet(viewsets.ModelViewSet): 
    queryset = Quote.active.all() 
    serializer_class = QuoteSerializer 

    filter_backends = (filters.OrderingFilter,) 
    ordering_fields = ('created_at',) 

    http_method_names = ['get', 'post', 'head'] 

    @detail_route(methods=['post']) 
    def action(self, id): 
     # put your code here 

Новый метод action создается автоматически будет DefaultRouter маршрутизатор и может быть accesed через:

api/v1/quote/{id}/action 
+0

Спасибо, это здорово .. –

Смежные вопросы